使用Doctrine 2和Repositories,服务层的目的是什么?

8
我正在设计我的应用程序,我正在使用Doctrine 2和Zend Framework。
目前,我已经编写了所有的实体,我打算开始编写Repositories,但是我想到了Services,并且我在想Service层是否会重复Repositories。
在我使用Doctrine 2 repositories的情况下,编写Service层是否值得?
然而,我在这里和那里读到,Service层可以用于缓存等操作。
你有任何实现示例吗?

您是否还需要关于服务层的更多信息? - Cobby
2个回答

10
仓库(Repositories)和服务(Services)的区别在于,我让我的服务接受数据数组进行更新、创建等操作。如果我没记错的话,真正的仓库应该只处理与领域对象相关的事务。此外,你可以使用你的服务层来处理生成产品缩略图、个人资料图片、缓存等操作。重点是,服务不仅限于处理Doctrine实体。
我仍然将自定义的仓库用作所有自定义查询和其他内容的容器;这些内容被用于我的服务类并偶尔直接用于我的控制器中。虽然我使用我的服务来序列化(用于JSON响应)。
仍然存在一小部分灰色地带需要你去感性认识。归根结底:如果你省略服务层并将逻辑放入仓库中,这对于维护和扩展性而言工作量并不会太大,只是类责任定义会更少。

5
基本上就是这样。通常你会将任何自定义的DQL查询作为方法放在仓库中,然后将任何其他逻辑放入服务中。通常情况下,您会将要放置在服务中的内容编写为ZF控制器操作,所以这取决于您是否需要/想要进行分离。如果您发现自己在控制器中重复使用逻辑,则使用服务通常很有用 - 这通常是需要使用服务的迹象。 - Jani Hartikainen
1
好的,谢谢你的回答。那么关于错误处理,我们应该在这种架构中的哪里处理异常? - JohnT
重点是它们实际上严格相关于使用Doctrine。严格是什么意思?仓库吗? - Keyne Viana

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接