Модель-контроллер циклическая ссылка / проблема проектирования - PullRequest
0 голосов
/ 11 июня 2010

У меня есть сущность CoreData X и контроллеры для этой сущности XController.Теперь есть другая сущность, XGroup, содержащая коллекцию X сущностей, и XGroupController.

Теперь проблема в том, что XGroupController должен взаимодействовать с XController, и было бы неплохо просто передать XGroupController XGroup для наблюдения, а затем получить XController из X-сущностей.

Таким образом, вопрос заключается в следующем: является ли хорошей идеей хранить (слабую, чтобы избежать сохранения циклов) ссылку на контроллер в объекте?Это просто чувствует себя немного "неправильно".Есть ли другой шаблон проектирования для этого?

[Редактировать] Еще немного информации: XController / XGroupController являются контроллерами представления;и причина, по которой он чувствовал себя «неправильным», заключается в том, что слой вида не должен находиться на уровне модели.Так что @TechZen прав в своем первом абзаце.

Однако, как бы я это сделал, если у меня нет этой ссылки?Я вижу способ передать XGroupController все существующие XControllers (а также обновить их при их изменении), а затем, когда элементы в XGroup изменятся, найти соответствующие контроллеры (проверив, находится ли свойство XControllers для его сущности X в XGroup)и, наконец, поговорите с XControllers.

Я должен снова поработать над вещами, которые модель уже хорошо обрабатывает.Разве это не делает уровень модели своего рода бессмысленным, если мне придется обрабатывать группы на уровне контроллера в другой раз?

Разница, которая имеет значение с точки зрения Лок / сложности, настолько значительна, я что-то упустил?(Возможно, я должен добавить, что в моем сценарии не имеет смысла хранить информацию, которую XGroupController должен предоставить XController через модель).

1 Ответ

0 голосов
/ 11 июня 2010

Если под «контроллером» вы подразумеваете контроллер представления / интерфейса MVC, то да, это неправильно, потому что нарушает инкапсуляцию.Модель данных должна быть совершенно не связана с тем, как ее данные отображаются.

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

...