15.7 总结
AOP经过10多年的发展,在企业级软件开发方面发挥了举足轻重的作用,我们在享受AOP编程带来方便的同时,也要注意AOP编程带来的负面因素,特别是切面过多所产生的不可控的叠加效果。
OOP和AOP在模块化和代码重用方面功不可没,重复并没有因此而消失。不管怎样,它们二者模块化的最小单元都是类,粒度相对来说还是比较小的,有时候我们需要更为宏观的重用,例如重用服务、系统等这些更大粒度的单元。
比如,公司有一个日常收发邮件的系统,现在正在开发一个新的财务系统需要为一些紧急事件发邮件通知,如果为此财务系统再开发一个新的邮件系统,这将会是巨大的浪费:对于邮件系统来说,发送一封通知和发送一封普通邮件并无很大区别。
为了重用这些软件服务,出现了面向服务的架构(SOA, Service-Oriented Architecture),面向服务的架构提供更大粒度[1]的单元封装,便于服务之间的重用,比较流行的实现是Web Service。
SOA让我们在重用方面迈出了更远的一步,但并不表示重复的结束,其实DRY涉及的内容非常广泛,并非一两种技术就能完全实现,它涉及的领域同样十分广泛,不仅在软件开发领域,其他领域都会出现重复的知识,并且这些知识的粒度同样有大有小。
[1]面向服务的架构是粗粒度的架构,尽管有人会提出粒度可大可小,但是实际都是一些粗粒度地服务/组件接口,只是在这些粗粒度的服务/组件里,粒度还能根据大小进行分类。举一个极端的例子,如果你为isNull(Object o)这样小的方法也建立一个Service的话,那将是一个笑话。