同步自:http://www.blogjava.net/AndersLin/archive/2006/06/24/54806.Html
在AOSD:应用AOP实现业务逻辑中, 我提出关注的接口;
其原文在javaeye上的讨论狼平方也提出可以用event,或者intercepter。
当然不同的方式可以解决不同的问题。这里要讨论一下aspectJ和Event以及intercepter的不同。
1. 先来看看event的方式:需要两个对象Event和EventHandler(EventListener),event和eventHandler,属于数据契约。换句话说,牺牲了编译检查的好处,当然可以应对变化时有一定的好处。一旦需求变化,代码上的变动需要的工作量不少,更为严重的是,如狼平方所说的侵入性太强。
2 接着看interceptor的AOP,相对于Event方式,虽然都是基于数据契约,都给自己做转型,但是代码量少了(因为代码生成),重要的是没有event那样的侵入性。
3. 狼平方做了改进,利用AOP来做brocastEvent的工作。需要做的工作还是很多,甚至我以为这个工作还不如直接用Interceptor来得直接。
如我在小议领域模型(Domain Model) 所说的Domain Service处理两个逻辑:业务规则和流程逻辑,而AOSD:应用AOP实现业务逻辑要试图解决的问题是流程上逻辑,而以上无论是那种方式,都无法解决一个问题:流程信息。
假定现有两个流程如下:
Word-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"
public class DomainService { public void bizPRocessA() { SomeObject instance = doSomeAction(); } public void bizProcessB() { SomeObject instance = doSomeAction(); } public SomeObject doSomeAction() { } }