boneferz
@boneferz
Java Developer

ООП. Взаимосвязь объектов в программе вне контекста их иерархии. Как правильно реализовывать?

(На всякий случай, что бы не было недопониманий: это не про наследование, а про создание объектов)


При обычной иерархия классов "родитель - дочерние объекты", родитель знает все о ребенке и может с ним полностью взаимодействовать. Но что делать когда дети должны знать о друг друге и взаимодействовать между собой?

Как правильно это реализовать?


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

GlobalData.objA.needMethod();

При этом у меня GlobalData - singleton.

Какие правильно поступать в данном случае? Какие шаблоны для этого используются? Или же, все таки я правильно все делаю?

Вот примерная иллюстрация
5c248ea5c11a4195476894.png
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ответы на вопрос 2
@dimoff66
Кратко о себе: Я есть
При обычной иерархия классов "родитель - дочерние объекты", родитель знает все о ребенке и может с ним полностью взаимодействовать.


Странное утверждение. Родителю не нужно ничего знать о ребенке, даже о его наличии, ребенку нужно знать все о родителе и обращаться при необходимости к родительским методам.

По поводу взаимодействия между классами можно почитать про dependency injection... Создается интерфейс, описывающий методы. При необходимости да, создается буферный класс, который связывает два класса. Но это делается в тех случаях, когда еще не решено какой именно класс будет использован или методы другого класса еще точно не определены, в противном случае никаких специальных костылей не требуется - создаете в классе экземпляр другого класса и работаете с ним.
Ответ написан
search
@search
Мой дедушка индиго
К этому вопросу рано или поздно приходят все кто экспериментирует с архитектурой. И тут, к сожалению, одним коротеньким ответом вряд ли получится отделаться. Этому посвящен раздел проектирования, который называется Domain Driven Design. По DDD есть полное руководство от создателя этой концепции Эрика Еванса. Это книга страниц на 500. Есть еще и сжатая, менее подробная версия от того же автора: Domain Driven Design Quickly. Она страниц на 100 и к тому же бесплатная.

А держать состояние в синглтоне ничуть не лучше чем использовать глобальные переменные. Выглядит более изощренно, но порождает те же самые проблемы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы