我知道问题的标题含糊不清,但我想不到任何更干净的方法。 (即使它看起来像是ZF问题,实际上也只是一个php MVC问题。)
我最近将一个项目从ZF2迁移到ZF3。主要区别在于每个模型和控制器中都需要依赖项注入。由于我现在注入了所有依赖关系,而不是使用serviceLocator调用它们(延迟加载服务),因此我遇到了两个问题。
现在有几个控制器确实很肿,正在实例化它们不会使用的服务。仅仅因为一个不同的动作需要一个服务,整个控制器现在就实例化了一个服务。即使实例化服务的性能并不是那么高,但仍然感觉很浪费。
我的问题是,自从我开始使用MVC以来,这基本上一直是我的问题,您将如何制作控制器?每个控制器多少个动作?或者在这种情况下,可能是:每个控制器有多少服务?
我现在甚至在考虑拆分每个控制器,因此所有操作都具有自己的控制器。这是一个好主意吗?
有什么想法吗?
答案 0 :(得分:1)
我个人是为了使Controller专注于单个Action。但是它应该能够执行/调用完成操作所需的一切。
例如,您有一个产品实体。对于基本的CRUD(我选择iCRUD,原因为何?:p),我将创建5个控制器:索引,添加,查看,编辑,删除(无论是否使用添加/创建,查看/读取等语义)。
最大的编辑是Edit,它必须“获取”现有的Product,将其加载到Form中并返回,仅用于设置编辑页面。在数据发布时,必须获取现有产品,将其加载到表单中,获取请求数据并将其加载到表单中,验证,准备存储,存储并返回响应。
但是我选择让它能够完成整个任务,但将其重点放在该Action上。
当然,您可以在单个控制器中拥有所有(i)CRUD操作,并且仍然可以正确应用MVC。我个人认为将它们分开更干净。从命名空间中,您应该能够推断出您正在寻找的类是什么。
以下项目的示例:
在我看来,很明显,我们在这里查看的是User模块,Controller子命名空间着重于User对象。 (此模块中的User对象具有同级元素:Route,Role等。)
必须说,做到这一点既有优点也有缺点。
专业人士:
骗局: