У меня есть несколько вопросов для вас, мудрые люди, связанные с проектированием ОО с интерфейсами и абстрактными базовыми классами. Рассмотрим следующий сценарий:
У меня есть абстрактный басовый класс "DataObjectBase" и производный класс "UserDataObject". У меня также есть интерфейс "IDataObject". Конечно, интерфейс предоставляет все открытые методы и свойства, которые должны быть представлены моими объектами данных, и вы, вероятно, можете догадаться, что абстрактная база реализует методы и свойства, общие для всех объектов данных.
У меня вопрос: если абстрактный басовый класс DataObjectBase реализует все, что указано в интерфейсе IDataObject, должен ли интерфейс быть объявлен в базовом классе или в производных классах?
В интерфейсах C #, объявленных в базовом классе, применяется простота к производным классам, но лучше ли это? Мне кажется, что реализация интерфейса в базовом классе делает менее очевидным, что производный класс реализует интерфейс, но опять же требует указания интерфейса для каждого производного класса.
Кроме того, если базовый класс НЕ был абстрактным, изменилась бы рекомендация?
Второй подвопрос: Если базовый класс реализует все методы / свойства интерфейса IDataObject, нужен ли этот интерфейс? Типовое имя базового класса можно просто использовать вместо имени интерфейса, например:
private DataObjectBase _dataObject;
частный IDataObject _dataObject;
В приведенном выше примере (где снова база реализует все, что представлено интерфейсом) обоим могут быть присвоены одни и те же производные типы. Лично я всегда использую интерфейс в этих ситуациях, но мне интересно слышать мысли людей.
Заранее спасибо.