Подтвердить что ты не робот

Сервисный уровень и контроллер: кто позаботится о чем?

В классе мы изучаем, как создать приложение Spring, хотя Spring не участвует напрямую, мы узнали, как создавать интерфейсы для объектов DAO и уровня сервиса.

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

Сервисный уровень: содержит службы для создания вещей и удаления вещей, здесь должна быть бизнес-логика.

Теперь все это имеет смысл в слое сервиса; кроме "обновления" объектов. Вы просто положили функцию "обновления", которая просто сохраняет объект в вашей базе данных? Или вам нужно определить там логику? Вот где мое замешательство, как, мое понимание объектов в Spring являются просто POJO. Теперь, кто проверяет данные?

Скажем, у меня есть объект "child" он имеет: Name, SurName, Gender, Photo, Birthdate поля. как я могу назвать службы? Или вы просто позволите контроллеру позаботиться о валидации, что мне кажется неправильным. С другой стороны, было бы неверно делегировать каждый сеттер, который должен быть вызван на уровень сервиса.

Итак, просто в основном: помогите мне в том, как определить сохранение ваших объектов через сервисный уровень.

4b9b3361

Ответ 1

Если вы хотите, чтобы контроллеры могли сохранять изменения в объекте Child, то традиционно у вас будет метод в службе с именем вроде ChildService.update(Child newchild), который будет обрабатывать вызов правильных DAO для сохранения новой версии этого ребенка.

Контроллеры могут запросить услугу для Ребенка, изменить поля вокруг (возможно, на основе некоторого ввода пользователя) - разумная конструкция будет иметь контроллер, выполняющий некоторую работу с дочерним POJO, а затем попросить Службу сохранить изменение, Модель POJO ничего не знает о контроллере, службе или DAO, а просто держит данные, как вы предлагаете, - конечно, вы не хотите, чтобы каждый вызов setName() или setGender() автоматически приводил к обновлению базы данных.

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

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

Ответ 2

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

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

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

Таким образом, контроллеры содержат код инфраструктуры веб-инфраструктуры, службы содержат логический код приложения.