我在grails应用程序中创建了一个服务。在那个服务中有25种方法。 一些方法用于获取数据并传递给控制器,一些方法用于应用业务逻辑,另一些方法用于数据库数据CRUD操作。
为服务编写具有不同行为的多个方法是否是个好主意? 我是否必须进行服务交易?
以及默认方法的用途
def serviceMethod() {
}
这个方法是在我创建新服务时创建的......
答案 0 :(得分:3)
编写具有不同行为的多个方法是否是个好主意 服务?
服务中的多个方法非常精细,如果服务中的方法与上下文相关,那么它就变得很有意义。
以一个名为springSecurityService
的服务为例。您可能希望其中包含的方法与弹簧安全操作相关。你不希望在那里找到sendMail
方法。
我是否必须进行服务交易?
如果在该服务中执行数据库操作(主要是写入!),则应该使服务成为事务性的。当您的服务是事务性的时,您可以在发生故障时回滚数据库操作。
默认方法的用途是什么
默认方法只是占位符。随意编辑或删除它:D
答案 1 :(得分:2)
默认情况下,Grails中的服务是交易性的 - http://grails.org/doc/latest/guide/services.html#declarativeTransactions
serviceMethod
由CreateService脚本生成。这只是一个例子,如果您愿意,可以删除它。
您可以将所有业务逻辑放在服务中。它很方便,但请注意,这更像是一种称为Anaemic Domain Model
的反模式 imho,你应该尝试遵循面向对象的原则,并将大多数业务流程放在域类中。当存在涉及多个域对象的复杂过程时,您可以将其置于服务中。