Имеет ли вездесущий базовый объект анти-паттерн? - PullRequest
3 голосов
/ 08 февраля 2009

Я помню, как где-то спорил об этом, и в настоящее время я думаю об удалении базового объекта, от которого наследуется каждый бизнес-объект в системе, над которой я работаю. Он содержит несколько свойств, некоторую логику базы данных и логику конструктора.

Это анти паттерн, или жюри все еще отсутствует? Было бы лучше иметь базовый контракт для наследования, что потребовало бы определенного количества стандартного кодирования для каждого объекта?

РЕДАКТИРОВАТЬ : Мне нравится dsimcha, и я чувствую, что это очень хорошо отражается на этом вопросе, я все еще рад слышать любые дальнейшие ответы

Ответы [ 3 ]

2 голосов
/ 08 февраля 2009

Я также хотел бы понять, с какими проблемами я могу столкнуться или должен знать

Потенциальная проблема в том, что вы используете множественное наследование: ваш подкласс наследует два экземпляра классов 'Eve' ... именно поэтому C ++ поддерживает так называемое виртуальное наследование.

Это часто используемая идиома: например, в .Net все происходит от System.Object ... и / или все COM-объекты реализуют интерфейс IQueryInterface.

2 голосов
/ 08 февраля 2009

Стандартное правило - использовать наследование только для обеспечения гибкости пользователям класса посредством полиморфизма и использовать композицию, если вы хотите повторно использовать код из других классов. Однако, если вы не нарушаете принцип замены Лискова , это, вероятно, не так уж плохо. Писать тонны шаблонного кода по своей сути тоже плохо, так как он затеняет части вашего кода, где происходит реальное действие, и является анти-СУХИМЫМ. Если вы нарушаете принцип подстановки Лискова, то это абсолютно плохая идея.

1 голос
/ 08 февраля 2009

Ничто не является анти-паттерном в вакууме. Ваш «класс Евы» вызывает у вас проблемы? Какие преимущества вы ожидаете получить от его удаления? На вопрос, входит ли он в , стандартный список анти-шаблонов помогает, только если он помогает выявить реальные проблемы.

...