Я не могу понять, как избежать параллельных иерархий на практике. например Рассмотрим приложение, которое должно создавать/сохранять/редактировать заметки на разных уровнях, это приложение на основе java swing.Являются ли параллельные иерархии наследования запахом кода?
домен Иерархия:
AbstractNote < MonthNote
< DayNote
< ProductNote
только для чтения Просмотра иерархии (как показан на JTabPane, каждый из которых JTable показать конкретные детали примечания)
AbstractNotePanel < MonthNotePanel
< DayNotePanel
< ProductNotePanel
отмечает редактор иерархию (отображается при нажатии пользователя на на конкретное примечание в строке таблицы.
AbstractNoteEditorDialog < MonthNoteEditorDialog
< DayNoteEditorDialog
< ProductNoteEditorDialog
Я прочитал один из способов избежать этого, чтобы используйте шаблон посетителя. here Но это не похоже на мою ситуацию.
Я вполне доволен своим дизайном, поскольку большая часть общего кода находится в абстрактном классе (применяя шаблон шаблона метода там). В случае, если мне нужно создать новый тип примечания, например. YearNote, тогда мне нужно параллельно создавать YearNotePanel и YearNoteEditorDialog, что вполне приемлемо для меня, потому что мне не нужно много кода из-за шаблонов. Прежде всего, я хочу избежать запаха кода в моем дизайне. Пожалуйста, предложите мне альтернативный дизайн в приведенном выше сценарии, чтобы мой код был еще модульным. Thanks
С чего начинается разница между MonthNote, DayNote и ProductNote? –
Они немного отличаются друг от друга и могут быть ОЧЕНЬ разными в будущем. Каждая заметка привязана к пользователю и имеет длинный текст. MonthNOte и DayNote имеют joda MonthYear и LocalDAte соответственно. В примечании к продукту нет информации о дате, вместо этого у него есть экземпляр продукта (другой объект домена), мы просто показываем имя продукта на ui. – Joe
избавиться от них ** не ** расширяя JSomething, когда-либо - они предназначены для использования как есть – kleopatra