@JFinal 你好,想跟你请教个问题:
詹总,我想请问一下,为什么JFinal的声明式事物定位在Controller级别。接触JFinal之前我是SSH的忠实使用者,一般都会把事物横切在Service层的逻辑处理方法中,JFinal为什么不这样?或者说提供Model里面的方法级别事物,因为Model采用的充血模式,本身可以处理逻辑的。
@JFinal 你好,想跟你请教个问题:
詹总,我想请问一下,为什么JFinal的声明式事物定位在Controller级别。接触JFinal之前我是SSH的忠实使用者,一般都会把事物横切在Service层的逻辑处理方法中,JFinal为什么不这样?或者说提供Model里面的方法级别事物,因为Model采用的充血模式,本身可以处理逻辑的。
声明式事务通常用 AOP 来实现,而实现 AOP 通常需要 IOC + 配置若干,这种 AOP 无法满足 JFinal 极速开发的设计目标,所以 JFinal 采用了现在的 Interceptor 来实现 AOP。
JFinal 的 Interceptor 的不需要 IOC,也不需要 XML 配置,是 JFinal 内置的极简实现,只能用于与之配套的 Controller,所以无法在 Service 层做 AOP。
AOP 是一种设计方法,本质上是为了将切面代码与业务代码独立出来,业务代码无需知道切面代码的存在,既然业务无需知道切面的存在,又何必知道切面是应用在在业务层之上还是控制层之上?应用在业务层之上唯一的好处可能是让切面晚些切入提升点性能。
当然,如果未来 JFinal 有办法实现一个任意层面的 AOP,并且是极简的实现,那肯定会推出,非极简设计不考虑。