#object #oop #design-patterns
Вопрос:
При моделировании взаимодействия между двумя объектами я иногда задумываюсь о том, какой объект должен быть активным во взаимодействии, а какой-пассивным, или же взаимодействие должно управляться сторонним контроллером.
В качестве примера давайте предположим, что у нас есть Предмет и Контейнер.
Можно было бы использовать три возможных способа взаимодействия между ними.
- пункт.Падение(контейнер)
- контейнер.Магазин(товар)
- Контролер хранилища.Магазин(товар, контейнер)
Предполагая, что все 3 подхода (и несколько других) могут быть правильными в данной ситуации, какие соображения вы принимаете для достижения наиболее устойчивого выбора дизайна?
Вопрос намеренно общий, поскольку меня интересуют общие принципы, которые люди применяют при назначении ролей объектам, особенно если общая архитектура находится на ранних стадиях, и еще не ясно, какой уровень ответственности будет нести каждый объект с течением времени.
Комментарии:
1. Смоделируйте домен. Предоставьте программным объектам те же роли, что и объектам реального мира, которые они представляют.
2. Существует эвристика под названием «Сделай это сам», задокументированная Питером Коудом, которая поддерживает вариант 2, даже если объект не может выполнить действие в реальном мире. Хорошим примером является прокатка штампа, в результате чего получается Die.roll(). Я не думаю, что существует общее правило.