SOA + MVC - Где я должен заполнить свойства объекта? - PullRequest
1 голос
/ 20 января 2012

Я работаю над приложением MVC, которое интенсивно использует Сервисы.Мой вопрос заключается в том, чтобы при создании объекта заполнять его свойства из контроллера или из службы?

Пример 1 - Заполнение из контроллера:

// MyController.php
function someAction() {
  $name = $_POST['name'];
  $gender = $_POST['gender'];

  $user = new User();
  $user->setName($name);
  $user->setGender($gender);

  $userService->createUser($user);
}

// UserService.php
function createUser($user) {
  $this->saveToDb($user);
}

Пример 2- Заполнение изнутри службы:

// MyController.php
function someAction() {
  $name = $_POST['name'];
  $gender = $_POST['gender'];

  $userService->createUser($name, $gender);
}

// UserService.php
function createUser($name, $gender) {
  $user = new User();
  $user->setName($name);
  $user->setGender($gender);

  $this->saveToDb($user);
}

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

Этотакже, похоже, следует принципу СУХО, потому что, если у меня есть несколько контроллеров, которым нужно создавать объекты User, я не буду повторять код.То же самое касается написания модульных тестов - я могу просто передать все аргументы объекту службы.

Но я видел и первый использованный метод, и мне интересно, есть ли какое-то преимущество в этом, чтоЯ не вижу.

1 Ответ

1 голос
/ 20 января 2012

Я бы пошел со вторым подходом, так как он СУХОЙ.

Первый подход в порядке, но вместо сущности БД вы должны передавать DTO, который можно использовать для заполнения вашей сущности БД внутриоказание услуг.Я бы не выставлял сущности БД из сервиса, чтобы отделить слой БД от уровня представления.

...