Когда клей или класс управления делают слишком много?

10

Я склонен к созданию централизованных классов, которые управляют другими классами в моих проектах. Он не хранит все сам, но большинство запросов данных сначала идут к «менеджеру». Глядя на ответ на этот вопрос, я заметил термин «Объект Бога». Википедия перечисляет это как антипаттерн, понятно.

Где проходит граница между допустимым классом склеивания или модулем, который передает данные и сообщения с места на место, и классом, который делает слишком много?

jprete
источник

Ответы:

15

Многие люди говорят такие вещи, как «класс никогда не должен быть больше вашей головы».

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

Однако обычно один класс, с которым это происходит, - это объект домена, который представляет фундаментальный элемент вашего домена - учетную запись для банковского обслуживания, продажу для розничной торговли и т. Д. Если вы обнаружите, что это происходит и с другими классами, вы, вероятно, хочу рассмотреть ответственность этого класса. Вот мои советы:

  • Если он называется «Менеджер», «Помощник» или «Сервис», скорее всего, он слишком велик. Как только вы на самом деле поймете, какой должна быть ответственность класса, вам будет легче делегировать другие обязанности.
  • Если он называется «Контроллер», он должен отвечать за контроль взаимодействия между кучей других классов ... и ничего больше.
  • Если он передает данные и сообщения между различными физическими узлами, то либо он должен иметь дело с преобразованием конкретного сообщения в сериализованную форму, либо он обрабатывает механизм передачи. Например, у вас может быть один класс, который преобразует банковскую транзакцию в XML, и другой класс, который отправляет этот XML через HTTP.
  • Если он передает события между различными модулями в приложении, он должен отвечать за оповещение слушателей, когда происходит событие, и больше ничего.

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

Lunivore
источник
Хороший ответ с полезными конкретными рекомендациями. Я склонен создавать такие классы для объектов домена, где все или почти все данные представляют некоторый аспект домена, и я хочу иметь возможность рассматривать его как единое целое. Затем я склонен делегировать действительные обязанности классам, которые действительно создаются только внутри большого класса. Так что я довольно близок к линии, и мне, вероятно, следует склоняться к уменьшению отдельных классов, когда я пишу это.
jprete