我正在创建自己的MVC框架,只是为了学习新东西并最近遇到了这个问题。 可以说我有这样的:实例化有很多参数的类
Class Post extends \application\BaseClass
{
private $objPostDetail = null;
private $objAuthor = null
private $objCategory = null;
private $objType = null;
private $objTitlePicture = null;
public function __construct(PostDetail $objPostDetail,
Author $objAuthor,
Category $objCategory,
Type $objType,
TitlePicture $objTitlePicture)
{
$this->objPostDetail = $objPostDetail;
$this->objAuthor = $objAuthor;
$this->objCategory = $objCategory;
$this->objType = $objType;
$this->objTitlePicture = $objTitlePicture;
}
}
然后在constuctor使用的一些物品也可以COMLEX创建。 我从PostDAO类获取数据,它返回数据数组。 现在的问题是如何创建这个类的新实例,因为它可能在应用程序的许多地方。 我想到处创建$ objAuthor,然后$ objCategory等等,最后创建$ objPost并不好。所以我创造了什么,我认为可称为厂:
Class PostFactory extends \application\BaseFactory
{
private $arrData = null;
private $objPostDetail = null;
private $objCategory = null;
private $objType = null;
private $objTitlePicture = null;
public function __construct($arrData)
{
$this->arrData = $arrData;
}
public function build()
{
$this->objPostDetail = $this->buildPostDetail();
$this->objCategory = $this->buildCategory();
$this->objType = $this->buildType();
$this->objTitlePicture = $this->buildTitlePicture();
return $this->buildPost();
}
private function buildPostDetail()
{
$objPostDetail = new \includes\classes\factories\PostDetailFactory($this->arrData);
return $objPostDetail->build();
}
private function buildCategory()
{
$objCategory = new \includes\classes\factories\CategoryFactory($this->arrData);
return $objCategory->build();
}
private function buildType()
{
$objType = new \includes\classes\factories\TypeFactory($this->arrData);
return $objType->build();
}
private function buildTitlePicture()
{
$objTitlePicture = new \includes\classes\factories\TitlePictureFactory($this->arrData);
return $objTitlePicture->build();
}
private function buildPost()
{
return new \includes\classes\Post($this->objPostDetail, $this->objCategory,
$this->objType, $this->objTitlePicture);
}
}
它运作良好,但我不喜欢,我有两倍多类,我不知道是什么参数,我需要实例化后因为我将数组传递给Factory类(因为我想避免构造函数中的许多参数)。 所以,我的问题是如何创建这样的类的实例的最佳方式是什么?
在此先感谢您的帮助。
我的问题是如何从模型中获取数据后创建对象,我知道如何将它传递给模型,因为它通常只有很少的参数。 – Petr
那么,同样的解决方案适用。你已经知道你从模型得到的回报。按照我的博客文章中的描述在命名参数样式中使用它。只要将构造函数的参数命名为与模型相同的名称,它就会自动传递给构造函数;) – Harold