【发布时间】:2012-12-23 23:54:25
【问题描述】:
我正在尝试了解 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);
}
}
}
一种方法比另一种更好吗?还是我完全搞砸了?
【问题讨论】:
标签: php dependency-injection domain-driven-design repository-pattern domain-model