经常感觉很多人对于架构和框架分得不是很清楚,随便写一点关于这方面的东西吧。如果以后对于这方面的认识更加深刻的话,再补充好了。 1. 架构和框架的设计层次不同 类似于硬件设计,软件设计也分为不同的层次。典型的软件设计层次如下图: 在这个图中我们可以看到,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可以大大减少工作量,使开发变得容易。通常使用框架应该是值得鼓励的。但是也要注意:
关于架构和框架,可以用一首诗来做结: 横看成岭侧成峰,远近高低各不同。 不识庐山真面目,只缘身在此山中。 |
|
来自: just_person > 《软件架构》