陈金洲 @mechiland 很早写的一篇文章,参加过 RubyConf2012 可能都看过,地址在 http://www.infoq.com/cn/articles/cjz-architecture-corruption
我觉得这是关于系统架构演化的很深刻的一篇总结分析文章,在经验上很足,对 Java 和 Ruby 社区很有启发意义。
最初提到的 AOP 的概念让我重新去维基百科 http://zh.wikipedia.org/wiki/面向侧面的程序设计 仔细看了一下,AOP 作用的范围其实是可以远超过"日志和权限"的,说白了就是业务之外的依赖技术(或者说实现业务的 DSL)才是难点,也是很多项目最终失败的原因。
发现我之前写的《人类思维和软件工程学》 http://mvj3.github.io/2013/12/15/human-mind-and-software-engineering/ 里的提到的三间段已经被 这篇两年前的文章在形式上做了类似的说明了,看来后来者走的坑都是一样的。
我把他对应的最终解决方案重新理解一下,"采用新技术"理解为"针对业务来说更精简的新技术", "重构到物理隔离的组件,将独立的模块放入独立的进程"理解为"开源和 Unix 管道工具化", "形成高度松散耦合的平台 + 应用"理解为"资源调用管理的操作系统式开发"。
和"关于文档"提到的"想象一下现在的 Rails3/Spring 框架,他们往往有超过 20 个第三方依赖,我们却没有觉得理解困难,最重要的原因是依赖隔离之后,这些模块有了独立的文档可以学习。"一样,开源是把系统架构解耦和模块化的最好手段。