在这个图中我们可以看到,Framework处于Micro-architectures和Application Level之间。Deisgn Patterns是Micro-architectures级的设计,Framework由多个Design Pattern和其他微架构设计元素形成。而Object&classes、Micro-architectures和Framework被称为 Micro Level设计。就是说,从Objects&classes到Framework,还没有发生质变。
对于Application Level到Global/Industry Level的设计来说,就都是Architecture的范畴了。从Application Level来说,它是由零到多个Framework组成的独立的应用程序,会考虑诸如UI之类的重要问题。System Level由多个应用组成,每个应用在整个系统中代表不同的角色,这些应用共同组成一个系统工作环境。Enterprise Level又是由System Level组成,通常跨越整个企业(这里是广义的企业)中的多个组织机构。Global/industry Level由多个企业通过Internet和商业市场组成一个相当大范围内的系统应用,B2B就是这样的Global Level设计的应用系统。
显然Framework和Architecture在这里的差别是巨大的,哪怕和Application Level相比。当一个应用中只使用了一个Framework时,我们可以把它叫做Architecture吗?事实上,Framework仅仅是 Architecture中的一个微不足道的部分。在Achitecture中,我们考虑技术视图时,会选择J2EE或.NET,然后才会考虑:是否要用 Spring、Hibernate?从这里可以看出,Framework只是技术视图的一个设计决策。
2. 架构和框架的Design Forces不同
其实,仅仅上面的描述也应该能够让大家清楚的认识到Architecture和Framework的区别了。但我还想在另外的方面更进一步说明。
Design Forces我不知道怎么翻译,只能解释一下了:Design Forces指设计主要针对的问题、领域和能力。勉强可以翻译成“设计针对”吧。
Framework的Design Forces主要是功能性、复杂性和性能。从Framework的定位和设计层次来说,它主要目的是帮助开发人员完成公共的、系统的功能,这些功能在大多 数应用中都需要,差别在于多少而已。对于一个Framework,完成系统的功能,隐藏并尽量简化这些系统功能的复杂性,同时提供可接受的性能,这就是它 的设计目标了。
而对于Architecture,其最主要的Design Force就是变更。其次,所有可能的问题都是要在Architecture中考虑:复杂性、功能、性能、技术、所有非功能需要等等。。。
3. OOP、AOP还是FOP(Framework oriented Programming)?!
做Java有一个好处,就是各种框架技术层出不穷,使用方便。但这不见得就是好事情。感觉很多人非常专注于框架的使用和研究,对框架注意力 甚至超过了对OO、Java、J2EE规范等基本的东西的注意力。倒是有些象当初Windows下面,用VB、VC、Delphi,还是 CBuilder?似乎有些人把OOP、AOP变成了FOP。
在我看来,框架这个东西,用用是可以的,研究就不必了;自己写个框架也是可以的,但也不应该停留在框架这个层次。不要在框架上浪费精力,把这个事情交给毕业生做好了。
4. 慎用Framework!
小标题夸张一点,是为了提醒大家。一般情况下,使用Framework可以大大减少工作量,使开发变得容易。通常使用框架应该是值得鼓励的。但是也要注意:
不要滥用Framework。不要在一个不是很大的项目中使用过多的Framework,不然维护会受到影响。
尽量不要同时使用几个功能上有交叉的Framework。这会使项目开发的管理更加复杂,同样会导致维护问题。
在Enterprise Level的应用中使用Framework时,要对Framework进行严格的评估,确保其Design Forces不和Enterprise Level的应用冲突!Framework在设计时刻通常不会考虑到Enterprise Level的问题,你不能想当然的认为它一定可以适合你的Enterprise应用!
关于架构和框架,可以用一首诗来做结:
横看成岭侧成峰,远近高低各不同。
不识庐山真面目,只缘身在此山中。