gpt4 book ai didi

php - 如何在 PHP 中创建一个成功的域对象工厂

转载 作者:搜寻专家 更新时间:2023-10-31 20:44:57 24 4
gpt4 key购买 nike

我正在摆弄 MVC 框架,我偶然发现了一个我不确定如何解决的问题。

我想为我的应用程序的模型层创建一个 DomainObjectFactory,但是,每个域对象都有一组不同的参数,例如:

  • 人 - $id、$name、$age。
  • 发布 - $id、$author、$title、$content、$comments
  • 评论 - $id、$author、$content

等等。我怎样才能轻松地告诉我的工厂我需要什么类型的对象?

我想出了几个选项:

  • 传递一个数组——我不喜欢这个,因为你不能依赖构造函数的契约来告诉对象他的工作需要什么。
  • 使 DomainObjectFactory 成为一个接口(interface),并创建具体的类 - 有问题,因为要创建的工厂太多了!
  • 使用 Reflection - 服务定位器的次数多吗?我不知道,我就是这样。

我可以在这里使用有用的设计模式吗?或者其他一些聪明的解决方案?

最佳答案

为什么要初始化一个Domain Object分配了所有属性?

相反,只需创建一个空的域对象。您可能会在工厂检查它是否有要执行的 prepare() 方法。哦 .. 如果你正在使用 DAO ,而不是直接与 Mappers 交互,您可能希望在您的域对象中构造和注入(inject)适当的DAO

值的赋值应该发生在 Service 中.通过使用普通的二传手。

一些例子:

Retrieving existing article

public function retrieveArticle( $id )
{
$mapper = $this->mapperFactory->create('Article');
$article = $this->domainFactory->create('Article');

$article->setId( $id );
$mapper->fetch( $article );
$this->currentArticle = $article;
}

Posting new comment

public function addComment( $id, $content )
{

$mapper = $this->mapperFactory->create('article');
$article = $this->domainFactory->create('Article');
$comment = $this->domainFactory->create('Comment');

$comment->setContent( $content );
$comment->setAuthor( /* user object that you retrieved from Recognition service */ );

$article->setId( $id );
$article->addComment( $comment );
// or you might retrieve the ID of currently view article
// and assign it .. depends how you build it all

$mapper->store( $article ); // or
}

Passing user input

public function getArticle( $request )
{
$library = $this->serviceFactory->build('Library');
$library->retrieveArticle( $request->getParameter('articleId'));
}

关于php - 如何在 PHP 中创建一个成功的域对象工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14422937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com