2015-06-10 3 views
0

В веб-службе REST имеется 3 уровня - контроллер, BO (служба) и DAO - стандартный способ? Зачем нам нужен отдельный слой BO. Почему бы не написать нашу логику в классе Controller, который вызывает разные классы DAO ??? Таким образом, в основном я хочу, чтобы все JAX-RS аннотаций, как -Имеет 3 уровня контроллера, BO и DAO стандартный способ? почему не просто Контроллер и DAO?

@GET

@Path("/{parameter}")

@Produces("application/json")

в интерфейсе контроллера и только корень @Path в реализации контроллера. Я не хочу излишне иметь еще один слой BO. Я хочу повторно использовать код, вызывая классы Controller непосредственно из других классов контроллера. Я знаю, что классы аннотируются, но это для среды выполнения JAX-RS, чтобы обрабатывать ее соответствующим образом. Могу ли я создавать экземпляры этих классов контроллеров и вызывать разные методы от других контроллеров ???

+0

Предположим, у вас есть веб-приложение, веб-служба поддержки, веб-служба SOAP, некоторые службы вызова RMI и т. Д., Которые вы хотите открыть, чтобы поговорить с вашим приложением, как вы достигнете этого, если вся ваша логика находится в 1 классе контроллера ? –

+0

, но мы действительно не выставляем код - это URL-адрес, который отображается. Клиент вызывает этот URL ... Теперь я пишу свой код в контроллере или на уровне сервиса, это не проблема - ни мне, ни моему клиенту. –

+0

У Restful Web Service есть собственный контроллер.Веб-приложения имеют собственный контроллер, SOAP Web Service имеет свой собственный контроллер. Ни один из этих контроллеров не разделен между собой. Итак, вы говорите мне, что хотите дублировать код для каждого из контроллеров? Это нарушает принцип «повторного использования кода». –

ответ

1

Я вижу две основные причины:

  1. Разделение проблем
  2. Повторное использование: Многие контроллеры, возможно, придется использовать один и тот же бизнес-логика
+0

Да, действительная точка. Но почему бы не иметь класс утилиты для разделения наших общих проблем. –

+2

ну, я думаю, что этот класс полезности, о котором вы говорите, может стать огромным, и, по сути, станет вашим BO. Кроме того, вы можете понять, что это обычное долгое время после того, как вы его кодируете. Хорошая практика состоит в том, чтобы разделить вашу логику на многие классы. например, «UserService», «ItemService» и т. д. ... – couettos

+0

Я имею в виду - класс утилиты только для того, чтобы ставить общие проблемы и не излишне создавать другой слой в целом, чтобы просто поставить логику, которая не может использоваться нигде. –

0

Чтобы отделить бизнес-логику от контроллера, а DAO только взаимодействовать с базой данных, поэтому она не содержит идеальной бизнес-логики.

Вы можете рассмотреть бизнес-логику используется несколькими модулями, как controller, rest service, SOAP service и т.д.

Пример: Предположим, у вас есть add функциональность, и вы хотите работать с GUI, а также SOAP service , Если вы пишете свою бизнес-логику (проверки, преобразования, вычисления и т. Д.) В контроллере, вам также придется переписать ее для службы SOAP. Это приведет к избыточности, и вы не сможете повторно использовать свой код.


Обновленного вопрос:

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

Пример: КонтроллерА требует наличия функциональности внутри контроллера. Для контроллера ControllerB требуется функциональность, присутствующая внутри ControllerA. Таким образом, в этом случае оба зависят друг от друга. Поэтому будет сложно понять поток кода. А также во время инъекции это создаст проблему.

+0

@PuneetPandey, которую вы можете отсылать [это] (http://stackoverflow.com/questions/4821130/modules-vs-layers-in- java-package-structure) и [this] (http://stackoverflow.com/questions/6260302/program-design-package-by-feature-vs-layer-or-both) Вопрос о том, как код разделен. –

+0

@PunnetPandey, я обновил свой ответ. –

Смежные вопросы