Кто-нибудь узнает какой-либо шаблон / антипаттерн в прилагаемой диаграмме классов? - PullRequest
4 голосов
/ 25 декабря 2009

альтернативный текст http://img8.imageshack.us/img8/8558/classdiagram.png

Краткое описание: Я сомневаюсь, нормально ли, что AbstractCrudDaoImpl реализует как интерфейс, так и абстрактный класс, которые наследуются от одного и того же родителя (ReadOnlyDao).

Ответы [ 5 ]

2 голосов
/ 25 января 2010

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

Я предлагаю изменить его на ReadableDao . То же самое для AbstractReadableDaoImpl .

2 голосов
/ 25 декабря 2009

Если в AbsractReadOnlyDaoImpl не определен какой-либо специальный метод, которого нет в интерфейсе ReadOnlyDao, это специфическое наследование практически бесполезно.

В остальном выглядит нормально.

1 голос
/ 25 января 2010

кажется странным. Должен ли CrudDao получить доступ к ReadOnlyDao вместо AbstractReadOnlyDao? Поначалу казалось странным, что AbstractReadOnlyDao обращается к AbstractReadOnlyDaoImpl, но при втором взгляде это выглядит нормально.

1 голос
/ 26 декабря 2009

Дизайн мне кажется очень разумным.

Глядя на диаграмму вашего класса, я смог получить четкое представление о каждом участнике. Я думаю, что это хороший знак - это означает, что есть четкое разделение ролей.

Тот факт, что CrudDao расширяет ReadOnlyDao, имеет для меня смысл. Операции чтения-записи - это расширенный набор операций только для чтения; если вы можете сделать что-то с интерфейсом только для чтения, вы должны быть в состоянии сделать это и с интерфейсом чтения-записи - это именно то, что достигается наследованием.

1 голос
/ 25 декабря 2009

Вы можете разделить этот вопрос на две части:

  • Нормально и имеет смысл иметь один интерфейс, производный от другого интерфейса?
  • Нормально ли иметь абстрактный класс и интерфейс, моделирующий одну и ту же концепцию?

На первый вопрос легко ответить: да, это имеет смысл в ситуациях, когда у вас есть некоторые классы, которые требуют только «базовый» интерфейс, но другие классы, которые имеют дело с более богатым интерфейсом.

Другой вопрос, с которым я ранее имел дело здесь .

...