|
|
by Narayanan A.R. June 15, 2005 翻译zhangv (derekzhangv.at.hotmail.com) 原文:http://www.devx.com/Java/Article/28422/0/page/4
深入源代码
为了理解样例需求的OOP设计,请参看源代码并思考以下几个问题: 下载
* 首先分析oldway包中EmployeeServiceTestCase 类中的代码 *查看testEmployeeCredit 方法 *搞懂业务类Employee和BusinessUnit *学习 service,repository和factory概念.这些是业务驱动设计的主要概念. *更深入地理解oldway包中的service,repository和factory类
而AOP地理解则应该是: *分析newway包中EmployeeServiceTestCase 类 *查看service,repository和factory类,基本和前一种差不多.只是你要让advice截取程序的流程. *研究aspect类学习point cut的定义
要执行程序,你需要做的工作: * 下载AspectWerkz 2.0 http://aspectwerkz.codehaus.org/ *设置以下的环境变量: set JAVA_HOME=c:\Program Files\Java\jdk1.5.0 set ASPECTWERKZ_HOME=C:\aw_2_0_2 set PATH=%PATH%;%ASPECTWERKZ_HOME%\bin set CLASSPATH= C:\aw_2_0_2\lib\aspectwerkz-2.0.RC2.jar;C:\aw_2_0_2\lib\aspectwerkz-jdk5-2.0.RC2.jar; classes;C:\ junit\3.8.1\resources\lib\junit.jar *解压缩源代码和其他文件 *编译Java文件,但不要编译测试用例否则你调试时会遇到一个错误. *进行离线调试.假设你把文件解压缩到c:\aop ,类文件解压到c:\aop\classes,在c:\aop目录下执行以下命令: %ASPECTWERKZ_HOME%\bin\aspectwerkz -offline etc/aop.xml -cp classes classes *AOP框架会修改类来注入必要的字节码 *编译测试用例,使用JUnit运行它.
后记 当你完成了上面的这些工作,你应该有以下的领悟: *程序中的交叉关联 *关于AOP中方面的含义 *如何用AOP来把程序业务层中的交叉关联分离出来,使用point cut和advice *在给定的一种情况下使用 OOP和AOP时在程序控制流上的不同
幸运的是,从本文你应该也得到一种看待实际开发的新视角.你应该有信心使用AOP来改进项目中的设计,建模和代码的重用性.至少,你可以开始使用AOP来处理日志,错误和持久化.
个人觉得,AOP的学习曲线相对较陡,尤其在理解定义point cuts的句法时.理想的情况是,使用OOP来设计业务模型,使用AOP把业务类中的交叉关联转移从而使代码简洁并提高可读性.
AOP的一个缺点是会使调试变得困难,因为不同于OOP,程序流变的复杂,交互是由编译期或执行期决定.我准备将来做一些自动化工具来解决这个问题. |
|