Использование ORM со строгим MVC Framework - PullRequest
3 голосов
/ 05 января 2012

Я довольно новичок в ColdFusion ORM, и у меня есть несколько вопросов, с которыми я надеялся получить помощь.

Я работаю над фреймворком, который использует довольно стандартную и строгую архитектуру MVC. Эта структура также имеет «сервисный уровень», который находится между контроллером и моделью. Сервисный уровень обрабатывает всю бизнес-логику и проверку.

Стандартный процесс CRUD выглядит следующим образом:

пользователь отправляет форму через представление -> представление отправляет контроллеру -> контроллер отправляет на сервисный уровень для обработки -> сервисный уровень может выполнять любую бизнес-логику и проверку запроса -> затем сервисный уровень отправляет данные в модель -> модель выполняет транзакцию с EntityNew () и EntitySave () -> модель затем отправляет ответ с идентификатором обратно на сервисный уровень -> Сервисный уровень применяет некоторую логику и создает сообщение для пользователя -> сервисный уровень, который отправляет ответное сообщение контроллеру -> контроллер затем отправляет его в представление -> представление затем отображает его пользователю.

Этот процесс работает хорошо, и я доволен разделением ролей. Он сохраняет всю логику в стороне от вида, контроллера и модели и изолирует ее на уровне обслуживания.

У меня вопрос, когда мне нужно связаться с базой данных на уровне сервиса для таких вещей, как проверка уникальности имени пользователя для проверки, как мне это сделать? Прямо сейчас я просто запускаю EntityLoad () прямо в сервисном слое. Похоже, что технически это происходит на уровне модели и напрямую взаимодействует с базой данных посредством ORM. Будет ли это рассматриваться как нарушение структуры MVC.

Еще одна вещь, в которой я не уверен, это то, что мне нужно заполнить раскрывающийся список в представлении данными из базы данных. Я запускаю EntityLoad () прямо в представлении, чтобы получить данные для раскрывающегося списка. Опять же, это технически обход модели с обменом данными с базой данных через ORM.

Думаю, меня просто смущают лучшие практики использования ORM в строгой среде MVC. Должны ли у меня быть отдельные методы в моих файлах модели для каждого взаимодействия с базой данных, а затем просто иметь представление или сервисный уровень, взаимодействующий с этими методами в модели? Организация всего кажется потерянной, когда я пытаюсь думать об этом так.

Просто пытаюсь обдумать это.

Любая помощь по этому вопросу будет принята с благодарностью.

Заранее спасибо.

1 Ответ

3 голосов
/ 05 января 2012

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

Использование ORM непосредственно с точки зрения, однако, неправильно.Не делай этого.Есть пара лучших способов справиться с этим.

  • Получите необходимые данные вместе с другими данными для построения страницы из контроллера (который обращается к модели).

  • Makeудаленный вызов из представления на сервисный уровень (Ajaxy) для получения данных.

Возможно, есть (возможно?) Другие способы справиться с этим.Но суть в том, что ваш взгляд не должен говорить со слоем модели.

...