我正在尝试了解 DDD,但有一些关于实体和存储库的事情我无法理解。
从这里的其他问题中,我意识到将存储库注入实体是一个坏习惯。但是当我组合对象时如何避免注入存储库?
让我们有一个简单的情况 - 事件和事件应用程序。这看起来很简单。
$event->add($application);
$eventRepository->save($event);
我相信 $application 是一个实体,所以我相信应该有一些 $applicationRepository。
这是否意味着我应该将 $applicationRepository 注入 $eventRepository 以保存 Event 实体?像
class eventRepository {
...
public function save(Event $event) {
...
foreach ($event->applications as $app) {
$this->applicationRepository->save($app);
}
...
}
}
我想到的另一个解决方案是:
$eventService->addAplication($event, $application);
class $eventService {
...
public function addApplication(Event $event, Application $app) {
// simple example of validation, something like $event->isAplyable()
if ($event->capacity > count($event->applications)) {
$this->applicationRepository->save($app);
$event->addApplication($app);
}
}
}
一种方法比另一种更好吗?还是我完全搞砸了?