Можно ли использовать повторное наследование для уменьшения классов? - PullRequest
1 голос
/ 21 февраля 2012

У меня был длинный класс, который я не смог разделить, потому что мне нужны все поля в одной таблице базы данных (Google AppEngine + Objectify).Я уже использую встроенные классы, где это возможно.Класс состоит в основном из геттеров и сеттеров плюс логика, лежащая в их основе.

Чтобы получить функциональные блоки, я решил использовать повторное наследование.Теперь это выглядит так:

  • MyStoredModel extends
  • AbstractSettingsModel extends
  • AbstractHierarchyModel (работа с родительскими / дочерними объектами) extends
  • AbstractInformationModel (содержит заголовок, описание, ...) extends
  • .....
  • AbstractModel

Это прощечтобы увидеть, что делает каждый класс, и я бы также сказал, что это легче проверить.Недостатком является «цепочка наследования».

Это считается плохим поведением?Каковы лучшие способы уменьшить класс?

Ответы [ 2 ]

4 голосов
/ 21 февраля 2012

Я бы подумал об использовании композиции для них. Таким образом, модель состоит из настроек, иерархии, информационных объектов.

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

0 голосов
/ 21 февраля 2012

Пока наследование имеет смысл с логической точки зрения, я уверен, что так оно и должно быть.

Но состав также может быть хорошей идеей.

...