应该在域类中使用什么逻辑以及Grails中的服务应该包含哪些内容?

Zac*_*ght 7 oop grails

我正在开发我的第一个Grails应用程序,它涉及移植旧的struts web应用程序.有很多现有的功能,当我移动时,我很难决定应该在服务中使用什么以及应该直接包含在模型中的内容?

来自大多数Ruby on Rails开发的背景,我觉得强烈倾向于将几乎所有内容都放在与它相关的域类中.但是,对于一个像我移植的应用程序一样大的应用程序,一些类最终将成千上万行.

您如何决定域中的内容与服务中应该包含哪些内容?有没有既定的最佳实践?我做了一些环顾四周,但大多数人似乎只是承认这个问题.

cde*_*zaq 9

总的来说,我遵循的主要准则是:

如果一大块逻辑涉及多个域类,则将其放在服务中,否则它将进入域类.

如果没有关于你正在处理什么样的逻辑的更多细节,那么很难比这更深入,但这里有一些更普遍的想法:

  1. 对于与视图呈现相关的事物,那些进入标记库(或者可能是服务)
  2. 对于处理找出要发送到视图的内容以及将其发送到哪个视图的内容,可以在控制器(或可能是服务)中查找
  3. 对于与外部实体(即文件系统,队列等)对话的东西,那些进入服务

总的来说,我倾向于错误地提供过多的服务,而不是将事情过于混乱.最后,所有关于什么对最有意义,以及你如何看待代码以及如何维护代码.

但是,我要注意的一件事是,您移植的内容可能存在高级别的代码重复.由于Grails是在Groovy上构建的,并且可以访问更强大的编程方法(如Closures),因此您可以清理并简化大部分代码.

  • 找到应该在域上的方法的一种好方法是,如果您有一个方法将域类作为其唯一参数传递,那么该方法可能属于域.我还会扩展@ cdeszaq的答案,并说如果你正在处理一个域类的多个`实例`,那就把它放在一个服务中.例如,如果您要改变特定类的多个实例,我会将其放入服务中.但总的来说,使用您的最佳判断,与您的团队讨论您不确定他们所属的方法. (4认同)