grails app/services、grails app/utils和src文件夹之间的区别



我正在努力确定这三个文件夹之间的区别以及我应该放在其中的内容。

到目前为止,我一直在将类、接口和其他与我的域类结构直接相关的东西(通过扩展或实现)放入src文件夹中。任何涉及到Grails控制器默认情况下所做之外的额外事务逻辑的东西,我都会放入grails-app/services文件夹中。最后,我已经将任何包含"helper"方法(即比较各种事物、特殊字符串操作等)的类放入grails-app/utils文件夹中。

如果我错过了这些文件夹的用途,请让我走上正确的道路。

非常接近。grails-app/utils是用于Codec类的——它的名称很奇怪,而且文档不足。我会把helper类移回src/groovy。

使用服务来完成事务性工作是很好的,但您也可以将服务用于非事务性方法。将static transactional = false添加到具有不需要事务的实用程序方法的服务类中。请注意,控制器中没有事务性,因此应该将所有持久性转移到事务性服务。

src/groovy helper类中的静态实用程序方法和服务中的非事务性方法基本上是等效的,所以对我来说,决定采用哪种路由将归结为依赖关系。如果该类依赖于Springbean,则将其作为一个服务,并通过依赖注入引用它们。否则,只需将其作为辅助类。

如果您发现自己向依赖于非域类的域类添加了一个方法,请问问自己为什么这个方法可以在服务中。这导致几乎每个域类都有相应的服务。

这使得将域类放在插件中变得更简单,这样您就可以通过使用同一域模型构建多个应用程序来扩展功能,而不是创建一个无法维护的大泥球。它也与鲍勃·马丁叔叔在《建筑的逝去岁月》中描述的应用程序模型一致http://www.youtube.com/watch?v=WpkDN78P884

考虑到你正在考虑建筑,读一些鲍勃叔叔和马丁·福勒的作品是个好主意。

最新更新