复杂要人命,它消磨开发者的生命,让产品难以规划、构建和测试。
-Ray Ozzie,微软公司CTO
1.将系统的构造和使用分开
软件应该将起始过程和运行时逻辑分离开,在起始过程中构建应用对象,会存在相互缠结的依赖关系。
(1)分解main
将全部构造过程搬迁到main模块中,应用程序只管使用。
(2)工厂
构建能力由工厂控制,而工厂又是在main模块。
(3)依赖注入
2.扩容,隔离关注问题
(1)java代理(通过反射)
(2)纯Java AOP框架(Spring AOP,JBoss AOP)
(3)AspectJ
3.测试驱动系统架构
最佳的系统架构有模块化的关注面领域组成,每个关注面均用纯Java对象实现,不同领域之间用最不具有侵害性的方法或类方面工具整合起来,这种架构能测试驱动,就像代码一样。