Pewna niepewność związana z implementacją modelu 3 struktury (obiekt domeny, maper danych i usługa)

Jak sugeruje nagłówek, mam małe problemy podczas implementacji modelu 3 struktury (obiekt domeny, maper danych i usługa).

W przeszłości, gdy ktoś rejestrował się na mojej stronie, po prostu bym to zrobił

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

i ta metoda będzie działać w takich krokach

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.

Wszystko to działa dobrze, ale staram się nie robić tego w ten sposób, ponieważ chcę, aby mój kod był bardziej użyteczny i testowalny.

Teraz, dzięki tej 3 strukturze modelu, obiekt domeny i moduł mapowania danych powinny komunikować się za pośrednictwem usługi, aby utrzymać je w izolacji od siebie, więc oto mój pomysł na usługę użytkownika

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?

    }    

}

A potem, żeby faktycznie uruchomić, zrobiłbym to z mojego kontrolera w ten sposób

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

Logika (jeśli jest inna) musi iść wregister() metoda w moimUserService klasa prawda? Ponieważ jeśli wejdą w Obiekt Domeny, gdy osiągnę etap potrzebowania bazy danych, aby wykonać pewne kontrole, takie jak gdyby nazwa użytkownika już istniała, to jak mam uzyskać dostęp do bazy danych? Naprawdę nie wiem, ponieważ obiekt domeny nie powinien wiedzieć nic o źródle danych.

Musi istnieć sposób na dostęp do bazy danych w przypadku małych zapytań, takich jak sprawdzanie, czy nazwa użytkownika lub adres e-mail już istnieje i mnóstwo innych drobnych zapytań, które należy wykonać.

Mam wiele obiektów / obiektów domen, które muszą wykonywać mnóstwo małych zapytań, aw przeszłości mój model miał dostęp do bazy danych z dowolnej metody i mógł wykonywać te zapytania, ale wydaje się, że nie jest to dozwolone w tym modelu o 3 strukturach i umieram, aby dowiedzieć się, jaki jest właściwy sposób, aby to zrobić, ponieważ musi istnieć jakiś sposób.

Leciałem nim, dopóki nie odkryłem, że Model jest warstwą podzieloną na 3 struktury.

Jakakolwiek pomoc lub popchnięcie we właściwym kierunku byłoby bardzo mile widziane, szczególnie dobre przykłady z życia. W Internecie wydaje się, że brakuje mi tego konkretnego problemu.

Dzięki.

questionAnswers(2)

yourAnswerToTheQuestion