как правильно делегировать эту функцию в ООП - PullRequest
0 голосов
/ 07 сентября 2011

Я использую codeigniter для проекта, и у меня есть пара вопросов о правильном способе разработки реализации.

У меня есть класс "Deal", который в основном содержит атрибуты сделки, такие как имя, истечение срока действия, описание сделки и т. д.

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

Данные для "Сделок" и "Кампании" поступают из их собственных отдельных классов моделей (DealsModel и CampaignModel).

Поскольку я хотел, чтобы контроллер вызывал только один класс, чтобы настроить кампанию и обрабатывать представление, я создал промежуточный класс под названием ViewManager, который создает соответствующую логику и массирует данные как из класса «Сделки», так и«Campaign» перед отправкой его контроллеру, который возвращает его в представление.

Теперь у меня есть некоторые функции в контроллере, которым требуется прямой доступ к классу модели.Мне интересно, должен ли я делегировать эту функциональность классу ViewManager и позволить ему обрабатывать его, так как у него есть экземпляр модели, или мне следует создать новый экземпляр модели в контроллере и вызвать его напрямую.

Такое ощущение, что чем больше я делегирую функции ViewManager, тем более запутанным становится код.

1 Ответ

1 голос
/ 07 сентября 2011

Все это звучит как плохая реализация MVC. Особенно Модельная часть.

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

Вся проблема связана с неправильной реализацией MVC, представленной в CodeIgniter. ActiveRecord не является достаточной заменой для реальной модели. Эта ошибка заставляет бизнес-логику в Controller и даже в View. Я обвиняю RoR.

P.S .. ох .. и имена классов, такие как Манагаре, обычно считаются запахом кода .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...