【问题标题】:multiple methods in service of grails服务圣杯的多种方法
【发布时间】:2012-06-13 10:21:01
【问题描述】:

我在我的 grails 应用程序中创建了一项服务。在该服务中,有 25 种方法。 一些方法用于获取数据并传递给控制器​​,一些方法用于应用业务逻辑,另一些用于数据库数据 CRUD 操作。

编写具有不同行为的多个方法来服务是个好主意吗? 以及我是否必须使服务具有事务性?

以及默认方法有什么用

def serviceMethod() {

    }

?

这个方法是在我创建新服务时创​​建的...

【问题讨论】:

    标签: grails grails-orm transactionscope grails-2.0 spring-transactions


    【解决方案1】:

    编写具有不同行为的多个方法是否是个好主意? 服务?

    服务中的多个方法非常好,如果服务中的方法与上下文相关,它就很有意义。

    以名为springSecurityService 的服务为例。您会期望其中包含的方法与 Spring 安全操作相关。您不会期望在那里找到sendMail 方法。

    我必须让服务事务化吗?

    如果您在该服务中执行数据库操作(主要是写入!),您应该使服务具有事务性。当您的服务是事务性的时,您可以在发生故障时回滚数据库操作。

    默认方法有什么用

    默认方法只是一个占位符。随意编辑或删除它:D

    【讨论】:

    • thanx @gotomanners,还有一件事想问,为保存所有对象提供公共服务是个好主意吗?意味着调用服务中定义的一种方法来存储我的对象?
    【解决方案2】:

    服务在 Grails 中默认是事务性的 - http://grails.org/doc/latest/guide/services.html#declarativeTransactions

    serviceMethod 由 CreateService 脚本生成。这只是一个示例,因此您可以根据需要将其删除。

    您可以将所有业务逻辑放在服务中。这很方便,但请注意,这更像是一种反模式,称为Anaemic Domain Model

    恕我直言,您应该尝试遵循面向对象的原则,并将您的大部分业务流程放在域类中。当有一个涉及多个域对象的复杂过程时,也许你可以把它放在一个服务中。

    【讨论】:

    • 谢谢你的回复,但我不完全清楚你想说什么?
    • 我试图解释你的业务逻辑应该去哪里,但显然我做得不好:)
    猜你喜欢
    • 2011-05-17
    • 1970-01-01
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多