Некоторая неопределенность с реализацией 3-х структурной модели (объект домена, преобразователь данных и служба)

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

В прошлом, когда кто-то регистрировался на моем сайте, я просто делал

$user->register($firstName, $lastName, $emailAddress, $username...);

и этот метод будет работать в таких шагах, как это

1. Check if the form sent was valid.
2. Check if all the required fields were filled.
3. Check the if the lengths of strings were valid and the range of integers etc.
4. Check if the input is in the correct format (regex).
5. Check if the username is already taken and if the email address already exists
   in the database
6. etc. etc.

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

Теперь, с этой 3-х структурной Моделью, Доменный Объект и Data Mapper должны обмениваться данными через Службу, чтобы держать их изолированными друг от друга, поэтому здесь »моя идея обслуживания пользователя

class UserService {

    public function register($firstName, $lastName, $email...) {

        $userDO= $this->domainObjectFactory->build('User');
        $mapper  = $this->dataMapperFactory->build('User');

        // Is this where I start doing my validation like in the steps above???
        // And if this is where I start doing my checks, when I get to the part
        // where I have to check if the username they want is already taken how
        // how do I do that check?

    }    

}

И затем, чтобы на самом деле запустить, что я сделал бы это из моего контроллера, как это

$userService = $this->serviceFactory->get('user');
$result = $userService->register($_POST['firstName']....);

Логика (еслис и ещеs) должен идти вregister() метод в моемUserService класс верно? Потому что, если они войдут в доменный объект, когда я достигну стадии необходимости базы данных, чтобы сделать некоторые проверки, например, если имя пользователя уже существует, как бы я получил доступ к базе данных? Я действительно нене знаю, так как объект домена не должен ничего знать об источнике данных.

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

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

Я летал на нем, пока не обнаружил, что Модель - это слой, который разбит на 3 структуры.

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

Благодарю.

Ответы на вопрос(2)

Ваш ответ на вопрос