The service Layer

Ther Service Layer

[b]Grails 定义了service 层的概念,grails团队不赞成把核心业务放入到Controllers里面去,因为它不能提升重用和划分清晰。[/b]

grails把主要的业务逻辑放在业务层里面,controllers去负责处理request流程,转向(redirect)等等。

创建service
grails create-service simple
他的存放地址是grails-app/services/SimpleService.groovy

声明性事务
[color=red]service中最具代表性的棘手问题是在两个Domian classes中的并行逻辑操作,这是因为他们的持久化跨越了两个操作。service允许我们授权一个事务划分,本质上就是说明一个service中类的所有方法都是被声明的。[/color]
class CountryService {
static transactional = false
}
关闭一个自动事务声明。

[color=red]注意:只要DI是唯一的方法让service declarative方法工作,如果你使用new service 将不会让事务有效。[/color]

service 范围
默认情况下访问service方法不是同步,service是单例的,所以你必须小心在里面处理数据库储存,最好或最简单的方法就是不要在service中保存数据。
想要改变这种行为,你可以改变service的scope,目前支持以下几种。
[list]
[*]prototype
[*]request
[*]flash
[*]flow
[*]conversation
[*]singleton (defalult)
[/list]
使用scopes的方法
static scope = "flow"



依赖注入service
基础:
grails使用spring的DI,grails支持DI by convention(约定)。
Grails仅仅支持DI by name,并不支持DI by typed。
给controller注入
class BookController {
def bookService

}
class AuthorService {
BookService bookService
}

service给service注入
class AuthorService {
def bookService
}

给Domian 注入
class Book {	

def bookService
def buyBook() {
bookService.buyBook(this)
}
}


[b]使用java的service[/b]
[color=red]如果把service类放入grails-app/services 中,java类是不能引用他的[/color]。
有一个办法可以解决,创建一个as grails-app/services/bookstore目录
在你创建的service中声明一个package bookstore
package bookstore
class BookService {
void buyBook(Book book) {
// logic
}
}
或者声明一个接口
package bookstore;
interface BookStore {
void buyBook(Book book);
}
实现这个service
class BookService implements bookstore.BookStore {
void buyBook(Book b) {
// logic
}
}

[color=red]创建一个java类放入到src/java中[/color]
package bookstore;
// note: this is Java class
public class BookConsumer {
private BookStore store; public void setBookStore(BookStore storeInstance) {
this.store = storeInstance;
}

}


进行spring配置,在grails-app/conf/spring/resources.xml 添加这些代码
<bean id="bookConsumer" class="bookstore.BookConsumer">
<property name="bookStore" ref="bookService" />
</bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值