当前位置:编程学习 > JAVA >>

面向方面 vs 面向对象 4(深入代码)

 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 FilesJavajdk1.5.0
set ASPECTWERKZ_HOME=C:aw_2_0_2
set PATH=%PATH%;%ASPECTWERKZ_HOME%in
set CLASSPATH=
C:aw_2_0_2libaspectwerkz-2.0.RC2.jar;C:aw_2_0_2libaspectwerkz-jdk5-2.0.RC2.jar; classes;C: junit3.8.1esourceslibjunit.jar
*解压缩源代码和其他文件
*编译Java文件,但不要编译测试用例否则你调试时会遇到一个错误.
*进行离线调试.假设你把文件解压缩到c:aop ,类文件解压到c:aopclasses,在c:aop目录下执行以下命令:
%ASPECTWERKZ_HOME%inaspectwerkz -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,程序流变的复杂,交互是由编译期或执行期决定.我准备将来做一些自动化工具来解决这个问题.
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,