14

我试图确定这三个文件夹之间的区别以及我应该放入其中的内容。

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

如果我错过了这些文件夹应该用于什么的标记,请让我走上正确的道路。

4

2 回答 2

12

那很接近。grails-app/utils 用于 Codec 类——它的名字很奇怪,而且文档不足。我会将帮助类移回 src/groovy。

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

src/groovy 辅助类中的静态实用程序方法和服务中的非事务性方法几乎是等价的,所以对我来说,决定采用哪条路线将归结为依赖关系。如果该类依赖于 Spring bean,则使其成为服务并通过依赖注入引用它们。否则就让它成为一个助手类。

于 2012-07-09T03:25:57.693 回答
2

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

这使得将您的域类放入插件中变得更简单,这样您就可以通过使用相同的域模型构建多个应用程序来扩展功能,而不是创建一个无法维护的大泥球。也与 Bob Martin 大叔在《Lost Years of Architecture》中描述的应用模型一致http://www.youtube.com/watch?v=WpkDN78P884

鉴于您正在考虑建筑,阅读 Bob 叔叔和 Martin Fowler 的一些作品是一个好主意。

于 2012-07-09T06:19:31.277 回答