潜鱼在渊

Concentrating on Architectures.

posts - 77, comments - 309, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
    经常感觉很多人对于架构和框架分得不是很清楚,随便写一点关于这方面的东西吧。如果以后对于这方面的认识更加深刻的话,再补充好了。

    1. 架构和框架的设计层次不同

    类似于硬件设计,软件设计也分为不同的层次。典型的软件设计层次如下图:

design-level.BMP

    在这个图中我们可以看到,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应用!

    关于架构和框架,可以用一首诗来做结:

    横看成岭侧成峰,远近高低各不同。
    不识庐山真面目,只缘身在此山中。  

评论

# re: 架构(Architecture)和框架(Framework)杂谈  回复  更多评论   

2005-11-22 11:58 by swing
1

# re: 架构(Architecture)和框架(Framework)杂谈  回复  更多评论   

2005-11-22 17:42 by hhhh
"在我看来,框架这个东西,用用是可以的,研究就不必了;自己写个框架也是可以的,但也不应该停留在框架这个层次。不要在框架上浪费精力,把这个事情交给毕业生做好了。"
对于这段话偶不得不说两句了,“自己写个框架也是可以的“,当然可以。不过你从来不研究其他人写的框架, 又如何写得好自己的框架。比如我要写一个GUI框架,我去研究一下swing,swt/jface 应该还是很有帮助的吧!还有写一个框架应该不容易吧!因为你要冒险定义某一领域的模型,比如你写了一个GUI框架,那么你等于在说GUI编程模型应该是这样的。
所以,
“研究还是必要的”;

# re: 架构(Architecture)和框架(Framework)杂谈  回复  更多评论   

2005-11-22 18:00 by hhhh
VB 与 java框架还是应当另当别论的。像vb ,pb这些东西,语言与开发环境是不可分的,或者说它们是开发环境主导的,语言反而成了开发环境的附属物。而java是标准化的,你也可以实现一个java的开发环境。

# re: 架构(Architecture)和框架(Framework)杂谈  回复  更多评论   

2005-11-23 00:37 by 非鱼
我写这一小节的意思是:不要被层出不穷的框架迷惑。
可能表达不是很清楚。

# re: 架构(Architecture)和框架(Framework)杂谈  回复  更多评论   

2005-12-27 15:25 by EJB,J2EE失乐园
架构(Architecture)和框架(Framework)杂谈, 期待有下篇

# re: 架构(Architecture)和框架(Framework)杂谈  回复  更多评论   

2006-02-10 15:05 by huion
3. OOP、AOP还是FOP(Framework oriented Programming)?!

做Java有一个好处,就是各种框架技术层出不穷,使用方便。但这不见得就是好事情。感觉很多人非常专注于框架的使用和研究,对框架注意力甚至超过了对OO、Java、J2EE规范等基本的东西的注意力。倒是有些象当初Windows下面,用VB、VC、Delphi,还是 CBuilder?似乎有些人把OOP、AOP变成了FOP。

在我看来,框架这个东西,用用是可以的,研究就不必了;自己写个框架也是可以的,但也不应该停留在框架这个层次。不要在框架上浪费精力,把这个事情交给毕业生做好了。


框架大都是一些构架模式的体现,像mvc orm di
好的框架都是 OO java规范的体现...
为什么不研究呢???

# re: 架构(Architecture)和框架(Framework)杂谈  回复  更多评论   

2006-04-26 22:27 by gzscorpio
受益,但也不必鄙视框架的研究,就像搞项目管理的不必鄙视编程的一样,其实没什么高低之分,只是大家的专注点不同而已

# re: 架构(Architecture)和框架(Framework)杂谈  回复  更多评论   

2006-07-14 10:01 by 梦者
恩,对于框架的理解我基本明白了,但架构还是有些迷惑,不知道我下面的说法是否正确:架构可以简单理解为在多种框架的基础上做更高一级框架的设计。这样说似乎变成了框架的递归。

# re: 架构(Architecture)和框架(Framework)杂谈  回复  更多评论   

2006-08-26 12:26 by jindw
叫 Architecture也好、 叫Framework也好、上层的设计如果能够简化开发,给程序员带来实惠,他就有前途,这样的标准才会有人去遵循,如果仅仅是几个中看不中用的概念集合,它就忽悠不料多久了,早晚会死掉。

成功设计可以做到复杂问题简单化,反之就会简单问题复杂化。

# re: 架构(Architecture)和框架(Framework)杂谈  回复  更多评论   

2006-11-27 14:00 by 路过
一个成功、稳定的框架都要需要相当长时间演化,至少应用到3个项目,并经受项目特殊需求的考验,才可以实现重用的目的。

自己动手做框架一般发生在嵌入式领域,其实也就是把PC上的抄过来就可以了,在这种情况下需要“框架”。一般在PC机上只要会使用框架的API就可以了。

# re: 架构(Architecture)和框架(Framework)杂谈  回复  更多评论   

2011-11-14 00:55 by momo2003
架构是一个总体的东西,而框架是一个具体的东西。举个例子:建筑设计师给出的是一个大楼的总体架构,而框架就是这个架构的具体实现。
自己的理解,可能不对。

只有注册用户登录后才能发表评论。


网站导航: