Правильно ли я реализовал n-уровневое приложение с MVC? - PullRequest
2 голосов
/ 23 мая 2009

Будучи довольно незнакомым с шаблонами проектирования и архитектурой, я с трудом объясняю другим, как именно разрабатывается мое последнее приложение. Я переключился с мысли, что это чистый n-ярус, чистый MVC и n-ярусный с MVC на уровне представления. В настоящее время я думаю, что последнее является правильным, но я хочу мысли от более опытных разработчиков.

Как это работает:

  1. Браузер отправляет HTTP-запрос Tomcat. Сопоставляет запрос через web.xml с сервлетом (который я называю контроллером)
  2. Контроллер создает один или несколько бизнес-объектов и вызывает для них методы, т. Е. customerBO.getById(12), которые снова выполняют бизнес-логику / проверку перед вызовом одного или нескольких методов DAO, т. Е. customerDAO.getById(12). BO возвращает список CustomerVO в контроллер
  3. Контроллер подготавливает атрибуты для представления (JSP) (request.setAttribute("customers", customers);) и выбирает для использования файл .jsp, который, в свою очередь, выполняет итерацию списка и возвращает XHTML обратно в браузер.

Структура (мое предложение / понимание)

Уровень представления : в настоящее время используется то, что я считаю веб-реализацией MVC: сервлеты (контроллеры), jsp (представления) и моя собственная реализация форм OO XHTML (т. Е. CustomerForm). Должна быть возможность использовать Swing / JavaFX / Flex GUI, отключив этот уровень представления без необходимости что-либо менять на уровнях ниже.

Уровень логики : разделен на два слоя с бизнес-объектами (BO) сверху. Отвечает за бизнес-логику, но я не нашел здесь много чего, кроме проверки ввода, поскольку приложение в основном состоит из простых действий CRUD ... Во многих случаях методы просто вызывают метод с тем же именем на уровне DAO.

Классы DAO с методами CRUD, которые снова связываются с уровнем данных ниже. Также есть методы convertToVO (ResultSet res), которые выполняют ORM из базы данных и (списки) объектов значений. Все методы принимают в качестве входных данных объекты-значения, т. Е. CustomerDAO-> save (voter) и возвращают обновленного избирателя при успехе и ноль при ошибке.

Уровень данных : В нижней части данные хранятся в базе данных или в виде файлов XML. Здесь я ничего не «кодировал», кроме некоторых хранимых процедур и триггеров MySQL.

Вопросы (кроме одного в названии):

  1. М в MVC. Я не уверен, смогу ли я назвать этот n-уровневый MVC, когда модели представляют собой списки / VO, возвращаемые из бизнес-объектов на логическом уровне? Должны ли модели находиться на уровне представления, когда здесь находится контроллер / представление? И можно ли шаблоны форм на уровне представления называть моделями? Если так; Можно ли рассматривать формы и списки из BO как M в MVC?
  2. Насколько я понимаю, в MVC представление должно наблюдать за моделью и обновляться при изменении, но это невозможно в веб-приложении, где представление представляет собой визуализированную страницу XHTML? Это, в свою очередь, приводит меня к вопросу: по-разному ли реализован MVC для веб-приложений и обычных настольных приложений?
  3. Я не использую шаблон Front Controller, когда все HTTP-запросы явно отображаются в web.xml, верно? Чтобы использовать Front Controller, мне нужно перенаправить все запросы на стандартный сервлет / контроллер, который, в свою очередь, оценивает запрос и вызывает другой контроллер?
  4. Бизнес-уровень показался мне немного "бесполезным" в моем приложении. Что вы обычно кладете в этот слой / объекты? Всегда ли нужно иметь бизнес-слой? Я знаю, что она должна содержать «бизнес-логику», но что это такое? Я просто выполняю проверку ввода и создаю экземпляр одного или нескольких DAO и вызываю для них соответствующие методы ...

Я понимаю, что есть MVC-фреймворки, такие как Struts для Java, но с тех пор, как это было мое первое веб-приложение на Java, я попытался глубже понять, как все работает. Оглядываясь назад, я надеюсь, что вы сможете ответить на некоторые вопросы, на которые я наткнулся.

Ответы [ 2 ]

1 голос
/ 23 мая 2009

Я не уверен, что могу назвать этот n-уровневый MVC, когда модели представляют собой списки / VO, возвращаемые из бизнес-объектов на логическом уровне

Это совершенно хорошие модели. Я также считаю ActionForms в Struts моделями. ActionForms - это то, что Struts использует для представления / моделирования HTML-форм.

в MVC представление должно наблюдать модель и обновляться при изменении, но это невозможно в веб-приложении

Да, и это вопрос спора о том, можете ли вы иметь настоящий MVC с веб-приложениями.

Всегда ли нужно иметь бизнес-уровень?

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

Уровень данных:

Хранимые процедуры на самом деле не являются частью кода уровня данных. Вы должны создавать объекты доступа к данным (DAO), которые вызываются бизнес-объектами. DAO вызывают хранимые процедуры. Кроме того, интерфейсы DAO не должны давать никаких указаний бизнес-объектам относительно того, где хранятся данные, будь то база данных, файловая система или какой-либо веб-сервис.

0 голосов
/ 23 мая 2009

Я думаю, что вы застряли в терминологии. Шаблон MVC (я полагаю) предшествует классической арке веб-приложения, которую вы описываете. Раньше люди называли веб-приложение arch MVC 2 (модель 2 и т. Д.), Чтобы отличать его от исходного шаблона MVC ...

см. Ссылку> http://www.javaranch.com/drive/servlet/#mvc2

НТН

...