邓辉:2011.10.10
在建筑行业,除了Arhcitect外,还有个很重要的角色,叫structural engineer,这个角色考虑的问题是实现的经济性,Architect主要解决布局和用的问题。
在软件中,Architecture是个很含糊的概念。如果我们把范围做点局限的话,在软件中Architecture应该首先提供整个系统的Shape,这个Shape应该是由如何使用这个系统提供的,其实这个就是系统的概念模型。这个概念模型有多种呈现方式,比如物理目录结构,构成元素的名字,规则、协作方式等等。
由于在和建筑做类比时,忽略了structural engineer这个角色,所以很多软件架构在设计时,会忽略掉实现的经济性和可行性。有时,经济性和可行性会从根本上影响到系统的布局和使用,这个在建筑行业经常发生。
可以这样说,架构的设计有两个层面,一个逻辑层面,一个物理层面。逻辑层面考虑以用为导向系统的shape,可以脱离具体的部署环境。在物理层面要考虑实现的经济性和可行性,必须考虑实现时的约束。在做架构设计时,一定要在这两个层面不断震荡,才能形成真正好的架构。
framework只是个在实现时可供选择的工具而已,和libray没啥本质的区别,相反其侵入性要远大于libray。
物理设计会影响逻辑层设计的决策,但是这两个层次要分离,这样才是好的设计
框架是实现,设计模式是思路,没有可比性。2、框架和库没啥区别,都是完成某种任务的实现工具,只是框架试图通过对某个特定领域的需求进行预测来把大部分的实现决策进行固定,而预留一些hook价格应用来定制,这正是其侵入性所在,绝大多数情况下,框架都成为限制做正确的事情的障碍(当然,能感知到这点不太容易),从这一点来说,其不如lib。