【发布时间】:2015-04-01 20:16:55
【问题描述】:
不知道是不是我太累了,错过了什么,所以提前道歉。
我有一个 php 域,我需要对其进行重组,因为使用服务的模型最终会出现贫血。这是因为我没有使用 Doctrine 而是 Laravel 的 Eloquent 作为我的映射器(原因是由于链接到其他不同的数据库服务器类型)
我的审查结构需要与此类似:(我仅在此示例中包含几件事)
模板实体的模板名称为 VO。 TemplateName 必须满足 2 个规范。长度必须超过 3 个字符并且必须是唯一的。
我正在使用 TemplateRepositoryInterface 来检查唯一性,并且该接口具有绑定在服务提供者中的 Eloquent 实现。
因此模板实体有一个方法:
public function create()
{
if ($this->meetsTemplateNameSpecification())
{
//fire events etc... saving to repo is done one step above from a service that call this class and gets $this to send tot he interface
return $this;
}
throw new InvalidArgumentException("Template name is not valid.");
}
然后我的 meetTemplateNameSpecification 方法:
private function meetsTemplateNameSpecification($originalTemplateName = null)
{
$templateNameSpecification = new TemplateNameSpecification($this->name, $originalTemplateName);
if($templateNameSpecification->isMet())
{
return true;
}
return false;
}
在此重组之前,服务会启动所有这些并将 RepositoryInterface 传递给它们,因此这很容易。但是,这样我不知道如何和/或在哪里传递或注入接口,因为如果我将它从容器注入到规范类,那么我不能从实体启动,也不能将规范类注入实体要么是因为我希望能够使用它的构造函数。
我发现在 PHP 和 Active Record 中保持关注点分离和不依赖于域中的持久性非常困难。
有人有更好的结构吗?如果您需要更多代码,请告诉我。 到目前为止,我想到的唯一解决方案是在我的规范对象中使用静态方法,这样它们就不需要启动,我可以从容器中注入 Repo 依赖项。这是要走的路还是有更好的方法可以使用 PHP。我也讨厌必须从容器注入域,但除非您使用不同的架构,否则我认为没有更好的方法。
【问题讨论】:
标签: php laravel dependency-injection domain-driven-design ddd-repositories