Я реорганизую свой дизайн, ориентированный на данные, в сторону домена, и у меня есть несколько вопросов о том, как должен быть структурирован код
У меня есть User entity
namespace Planner\Domain\Entities;
class UserEntity {
private $userId;
private $weight;
private $height;
public function __construct(int $id, float $weight, float $height){
$this->userId = $id;
...
}
}
I также есть Settings entity
, который должен быть создан вместе с созданием объекта пользователя.
namespace Planner\Domain\Entities;
class SettingsEntity {
private $id;
private $userId;
private $darkTheme;
public function __construct(int $id, int $userId, bool $darkTheme){
$this->id = $id;
$this->userId = $userId;
$this->darkTheme = $darkTheme;
}
}
Объект Settings не может существовать без пользователя, поэтому настройкой settingsEntity должен управлять объект User. Это означает, что сущность User не является просто сущностью, это должна быть совокупность root.
В текущий момент, когда пользователь нажимает кнопку «создать учетную запись», приложение отправляет запрос API на * 1013. *, действие контроллера отправляет объект запроса в Planner\Application\Services\UserService
метод сохранения.
namespace Planner\Application\Services;
use Planner\Domain\Entities\UserEntity;
use Planner\Domain\Entities\SettingsEntity;
use Planner\Domain\Repositories\UserRepository;
use Planner\Application\Services\SettingsService;
class UserService {
public function __construct(UserRepository $repo, SettingsService $settings){
$this->userRepository = $repo;
$this->settingsService = $settings;
}
public function save($request){
$user = new UserEntity(...);
$settings = new SettingsEntity(...);
if(!$this->userRepository->save($user) || !$this->settingsRepository->save($settings)){
throw new UserCreationFailedException();
}
}
}
Проблема в том, что я не знаю, следует ли создавать объект User и объект настройки в одном go из (теоретически, поскольку у меня нет User Aggragate Root, только пользовательский объект) Aggregate User root или, если текущий способ действителен.
У меня есть другие объекты, которые должны быть создается одновременно ... так же, как объект настроек, я просто добавляю их к проверке if
в методе сохранения UserService (приведенный выше код) или все это должно быть под пользователем Aggregate, например:
namespace Planner\Domain;
class User extends AggragateRoot {
public function __construct(UserRepository $repository){
$this->repository = $repository;
}
public function createAccount($request){
$user = new UserEntity(...$request);
$settings = new SettingsEntity(...$user);
$this->repository->save($user, $settings);
}
}