我是MVCish结构的新手,所以请放轻松。为了理解目的,我正在编写自己的小MVCish“框架”。我一点一点地想要理解所有人是如何以正确的方式融合在一起的。
tereško严重依赖How should a model be structured in MVC?以及Domain Object != Domain Object Collection
这一事实,我正试图找出一种方法来处理批量中的域对象创建及其在集合中的相应插入。
哦,他的例子,他将一个ServiceFactory实例传递给控制器和视图。此实例在其构造函数上注入了MapperFactory和DomainObjectFactory。没有收集工厂。
$serviceFactory = new ServiceFactory(
new DataMapperFactory($dbhProvider),
new DomainObjectFactory
);
/*
* Initialization of View
*/
$class = '\\Application\\View\\' . $request->getResourceName();
$view = new $class($serviceFactory);
$view->setDefaultTemplateLocation(__DIR__ . '/templates');
/*
* Initialization of Controller
*/
$class = '\\Application\\Controller\\' . $request->getResourceName();
$controller = new $class($serviceFactory, $view);
ServiceFactory.php就像
class ServiceFactory
{
private $domObjFactory;
private $mapperFactory;
private $services = array();
public function __construct(MapperFactory $mapperFactory, DomObjFactory $domObjFactory)
{
$this->mapperFactory = $mapperFactory;
$this->domObjFactory = $domObjFactory;
}
public function create($name)
{
if ( array_key_exists($name, $this->services) === false )
{
$serviceName = '\Vendor\\'.$name.'Service';
$this->services[$name] = new $serviceName($this->mapperFactory, $this->domObjFactory);
}
return $this->services[$name];
}
}
作为一个例子,假设我有一个名为Contract
的域对象,我希望我的视图能够在列表中显示它们。它应该告诉“模型”类似$ContractService->fetchAll()
的东西,它会实例化一个集合并告诉映射器用所有契约填充它。正确?
考虑到集合应该包含域对象,像$ContractMapper->fetchAll($collection)
这样的方法应该创建一堆,如何处理它们的创建!?
我相信这可以通过编码不良的方式轻松实现,但我正在努力寻找最优雅,最干净的解决方案。