我正在试图确定这三个文件夹之间的差异以及我应该放在它们中的内容。
截至目前,我一直在将类,接口以及与我的域类结构直接相关的任何内容(通过扩展或实现)抛出到src
文件夹中。任何涉及额外事务逻辑的事情都超出了Grails控制器的默认值,我已经放入grails-app/services
文件夹。最后,任何包含“帮助”方法的类(即比较各种事物,特殊字符串操作等)我已经放入grails-app/utils
文件夹。
如果我错过了应该使用这些文件夹的标记,请将我放在正确的道路上。
答案 0 :(得分:11)
那非常接近。 grails-app / utils用于编解码器类 - 它的名称很奇怪并且记录不足。我将帮助程序类移回src / groovy。
使用服务进行事务性工作很棒,但您也可以将服务用于非事务性方法。将static transactional = false
添加到具有不需要事务的实用程序方法的服务类。请注意,控制器中没有事务性,因此您应将所有持久性移至事务性服务。
src / groovy助手类中的静态实用程序方法和服务中的非事务性方法几乎是等价的,因此对我来说,决定采用哪种路由将归结为依赖性。如果该类依赖于Spring bean,请将其作为服务并通过依赖注入引用它们。否则只需将它作为辅助类。
答案 1 :(得分:2)
如果您发现自己向依赖于非域类的域类添加方法,请问问自己为什么此方法可以在服务中。这导致几乎每个域类都有相应的服务。
这使得将域类放在插件中变得更加简单,这样您就可以通过使用相同的域模型构建多个应用程序来扩展功能,而不是创建一个不可维护的大型漏洞。它也与鲍勃·马丁叔叔在失落的建筑年代所描述的应用模型一致http://www.youtube.com/watch?v=WpkDN78P884
鉴于您正在考虑建筑,最好阅读Bob叔叔和Martin Fowler的一些作品。