AOP@Work: 设计切入点来避免模式密集

“JUnit Cook's Tour”中的可用性和维护性

简介:在“JUnit: A Cook's Tour”一文中,作者 Erich Gamma 和 Kent Beck 讨论了 JUnit 的设计。他们指出,与很多成熟框架中的关键抽象一样, TestCase 也有很高的模式密集,易于使用而难以修改。在 AOP@Work 系列的第四 期文章中,Wes Isberg 重温了 Cook's Tour,说明如何通过使用 AOP 切入点设 计来代替面向对象设计,在一定程度上避免导致成熟的设计难以修改的模式密集 。

即使是最好的 Java 程序,也会随着时间的推移而老化。为了满 足新的需求,设计也在不断演化,关键对象承担着各种模式角色,直到它们变得 难以使用或者难以修改,最终不得不重构或者重写系统。面向方面的编程(AOP) 提供了一些将特性结合起来提供服务的更优雅的方法,这些方法可以减少交互、 降低工作量、延长设计和代码的寿命。

本文将分析 Erich Gamma 和 Kent Beck 在“JUnit: A Cook's Tour”(请参阅 参考资料)一 文中提出的设计。对于他们提出的每种 Java 模式,都给出一种 AspectJ 替代方 案,并说明这种方案是否满足下列标准设计目标:

功能性:提供的服 务是否强大、有用?

可用性:客户能否方便地得到服务?

可扩 展性:程序变化时是否容易扩展或者调整?

结合(分解) 性:能否与其他部分协作?

保护:面对运行时错误或者级联错误, 如何保障 API 的安全?

可理解性:代码是否清晰易懂?

设计的 每一步中,Gamma 和 Beck 都面临着两难选择,比如可用性与可维护性 、可理解性与结合性。在所有的选择中,他们采取的都是简单可用的路线,即便 这意味着要放弃次要的目标。因此,他们的设计使得编写单元测试变得很容易。 但我还是要问一问,如果使用 AOP 的话,能否避免其中一部分设计取舍呢?

这样问也许看起来不够通情达理,有些过于苛求。JUnit 把自己的工 作做得很好,设计中的取舍被很多开发人员所了解,并认为是很正常的做法。要 看看 AOP 能否做得更好,我必须问自己一些问题,比方说,能否增加更多的特性 ,使其更适合那些需要更多服务但不能满足 JUnit 最起码要求的客户。我这样做 不是为了改变 JUnit,而是要在达到主要目标的同时不放弃次要的设计目标。

本文中所有的例子都使用了 AspectJ,但也可用于其他 AOP 方法, 而且即使刚接触 AspectJ,这些例子也很容易理解。(事实上,阅读过 Cook's Tour 或者了解设计模式,可能要比您使用过 AspectJ 或 JUnit 更 有帮助。)

时间: 2024-11-03 21:12:37

AOP@Work: 设计切入点来避免模式密集的相关文章

数据库设计的一些构想(模式与数据库设计一)

设计|数据|数据库|数据库设计 数据库设计的一些构想(模式与数据库设计一) 一直以来我就有个想法希望能够把数据库设计的方式能够与模式挂上钩的,这里我所列出的内容可能还算不上模式,但与之有些类似,因此希望大家能够给予一些好的建议.有问题还请大家踊跃发言.                     加上下述文字一则我认为我所列举的这些类似于模式的东西与上一帖子是分不开的,二则是为了凑个字数的. ------------------------------------------------------

数据库设计的一些构想(模式与数据库设计二)

设计|数据|数据库|数据库设计 数据库设计的一些构想(模式与数据库设计二)   ;) 请大家多提意见相互交流!                                       -------------------------------------------------------------------------------------------- 职能划分功能化: 1/企业组织架构2/企业部门职能的组成要素描述3/部门层次结构4/部门职能划分5/员工职务职能划分6/职务职

聊聊结对设计的三种模式

  一个单干的设计师容易把投机取巧当做常识,把嘲笑甲方当做话题,把熬夜赶图当做骄傲,把"不懂欣赏"当做借口.而今天聊的结对设计不仅可以帮你改正这些毛病,还能提高创意输出的质量和效率等等,这个模式是由一个国外创意总监提出的,效果立竿见影,来收! 注:第一句话由@阿斌阿 授权提供,感谢 :) 译者注:结对设计并非新概念,结对编程.开发配测试."男女搭配,干活不累"等观念早已经在软件公司与互联网企业深入人心.去年在荷兰阿姆斯特丹举行的Interaction14大会上,Co

java设计优化之代理模式_java

代理模式使用代理对象完成用户的请求,屏蔽用户对真实对象的访问. 代理模式的用途很多,比如因为安全原因,需要屏蔽客户端直接访问真实对象:或者在远程调用中,需要使用代理对象处理远程方法中的技术细节:或者为了提升系统,对真是对象进行封装,从而达到延迟加载的目的. 在系统启动时,将消耗资源最多的方法使用代理模式分离,就可以加快系统的启动速度,减少用户的等待时间.在用户真正在做查询是,再由代理类加载真实的类,完成用户请求.这就是使用代理模式达到延迟加载的目的. 1.静态代理实现: 主题接口: public

面向对象分析与设计—四色原型模式(彩色建模、领域无关模型)

面向对象分析与设计-四色原型模式(彩色建模.领域无关模型) 1.背景介绍 至今我都清楚的记得我第一次被面试官问起什么叫"建模"技术时的情景,那是好 几年前的事情了,当时是胸有成竹的去面试一个有关系统分析.设计的.NET高级软件工程师岗位.面试官几乎没问我有关.NET方面的任何技术实现,他就简 单的问了问:"你如何把握你所分析出来的系统的正确性?",我当时有点小激动,觉得这个问题应该很简单嘛,都是概念而已,让他直接点问,结果他来一句: "你懂建模吗?,能给我

.NET框架设计(高级框架架构模式)—钝化程序、逻辑冻结、冻结程序的延续、瞬间转移

阅读目录: 1.开篇介绍 2.程序书签(代码书签机制) 2.1ProgramBookmark 实现(使用委托来锚点代码书签) 2.2ProgramBookmarkManager书签管理器(对象化书签集合的处理,IEnumerable<T>书签管理)  3.可恢复语句组件(将语句对象化) 3.1可恢复语句组件管理器(将可恢复语句视为普通的对象成员,IEnumerable<T>可恢复语句组件) 3.2可恢复语句组件运行时(Program CLR(简介)) 3.3可恢复语句逻辑配置(规则

请设计你的商业模式

成功的企业家首先必须具备前瞻力,找到最有潜力提供长期利润增长的客户群 文/ 子昱 领军企业首先是由于具有了领军的商业模式,具备了领先的战略,那么如何设计你的商业模式? 当我们初次研究一家公司时,总会从"商业模式"角度进发,只有说清楚了商业模式,你才真正算是对这家公司的研究入了门.这正应了竞争战略学者迈克尔·波特的那句话"没有不能赚钱的行业,只有赚不到钱的模式". 自从本世纪初.COM泡沫后,商业模式这个词迅速普及到各行各业,被视为创业制胜的"葵花宝典&qu

Draw2D--1. 设计思想和相关模式

设计 1.  Draw2d 设计思想 Draw2d是一个宿主在SWT Composite控件中的轻量级的构件(widge)系统.一个Draw2d应用程序由一个 SWT Composite控件, 一个轻量级系统, 以及其内容(figures)组成.Figures是Draw2d的建造块.下面的"Hello World"例子程序演示了如何实现一个最简单的draw2d程序.Listing for "Hello World" import org.eclipse.swt.wi

移动应用设计用户体验:暗黑模式讲解

文章描述:在苹果发布 iOS6 的时候,新功能中的广告追踪功能并未被刻意谈及.你知道吗?苹果为每部设备分配了独特的"标志"来追踪用户的浏览活动.广告商可据此推送针对性广告.即便这项追踪服务是匿名的,但仍会让在意隐私的人感到不爽. 哈里·布努(Harry Brignull)是英国一名用户体验设计师,拥有认知科学博士学位.他同时也是Dark Patterns(黑暗模式)网站的创始人.这家网站的作用,用他的话说就是"揭露网站欺骗性的用户界面设计手段".下面是国外媒体根据他