У меня есть определенный класс Thing
и интерфейс, который он реализует, с именем IThing
. Все, кто использует IThing
, могут предположить, что это действительно Thing
, так как это единственный класс, который реализует этот интерфейс, но в то же время он понимает, что он может получить доступ только к определенному подмножеству публичных членов Thing
, и есть неплохой дизайн причина для этого - в основном, IThing
- это версия только для чтения Thing
(это немного сложнее, но давайте притворимся, что это просто чтение и запись для решения вопроса).Имеет класс Thing, который реализует интерфейс IThing с плохой практикой?
Это хорошая конвенция, хотя? В качестве альтернативы я мог бы назвать этот интерфейс IThingReadOnly
или назвать класс ThingWritable
, или что-то вроде этого, но кажется, что эти имена будут громоздкими и менее читаемыми в большой базе кода.
Я также широко использую методы расширения для интерфейса и класса, поэтому у меня есть ThingExtensions
и IThingExtensions
. Это очень полезно, потому что каждый, кто читает код этих расширений, может работать из предположения, что он использует только публичные элементы Thing
и IThing
соответственно. Тем не менее, наличие как ThingExtensions
, так и IThingExtensions
файлов, сидящих рядом с проектом, по некоторым причинам немного сбиты.
Итак, какой вариант лучше - сохранить Thing
и IThing
рядом или переименовать один из них?
Update о близком голосовании:
Это вопрос на основе мнений, потому что это вопрос о наилучших практики - но это не вопрос прежде всего мнение на основе (пожалуйста, внимание различия). У SO есть много замечательных вопросов и ответов о лучших практиках, поэтому я думаю, что либо существует разница между этим вопросом и другим вопросом лучшей практики, который я не вижу, либо этот вопрос имеет такое же право на существование, как и любое другое передовой опыт.
Является ли 'Thing' обозначенным внутренним и' IThing' общедоступным? Являются ли свойства и методы 'IThing' явно реализованы в' Thing'? –
Нет, они оба публичные. Да, они явно реализованы. –