走在架构师的大道上 Jack.Wang's home

Java, C++, linux c, C#.net 技术,软件架构,领域建模,IT 项目管理 Dict.CN 在线词典, 英语学习, 在线翻译

BlogJava 首页 新随笔 联系 聚合 管理
  195 Posts :: 3 Stories :: 728 Comments :: 0 Trackbacks
 

点评:这篇文章说的很好,和大家分享一下,可能一些实战的朋友并不喜欢这种理论的东西,可以不看,这篇文章把软件体系结构和建筑学类比,形象化了体系结构设计。文章提到算法和数据结构有扩张和取代SA的可能,个人觉得有点欠妥,算法和数据结构毕竟是解决细粒度的问题,而体系结构最初从算法和数据结构脱离出来,形成一抽象的分析层次,就是因为软件越来越复杂,单凭算法和数据是很难解决问题的。算法数据结构和体系结构应该是属于不同的层次解决不同的问题罢了。文章也提到了黑盒复用和白盒复用的概念,强调了软件体系结构设计的意义。不过个人并不同意“软件体系结构是一个高层次上的抽象,它并不涉及具体的系统结构(比如B/S还是C/S),也不关心具体的实现。”笔者这句话,B/SC/S 其实是一种设计风格,是软件体系结构的设计模式,其实模式的目的就是重用。在实际的架构设计中你不仅要可虑体系结构设计风格、框架以及复用构件等等,你也要考虑实现的技术和关键点的决策,这些都是需要在开发前期确定的。所以软件体系结构是高层抽象是不关心实现,但是他要涉及到具体的系统结构。

从建筑角度来看软件体系结构

在业界,软件体系结构和建筑学的设计框架可以比。如果把软件体系结构类比做建筑学的蓝图,那构件就可以比作一砖一瓦,或者更大概念如:庭院,花园等。 

软件体系结构之所以可以独立于软件的数据结构和软件的算法,是因为业界把软件的数据结构和算法看做了烧砖的方法,或设计庭院的思想。但没有扩展到整个软件系统。一个软件系统是庞杂的。但是分治之后的东西仍然用到了最基本的软件算法和数据结构思想。之所以也有些人说SA可以不用,是因为算法和数据结构的扩张有代替现在的SA的可能。

完美的构件是可以进行黑箱复用的。不太完美的复用构件就是白盒复用,要在原来代码的基础上做些必要的改动。软件工程的思想正是体现在软件流程、软件模块和软件文档的复用之上。否则也就没有工程的说法。但是又有人提出软件体系结构复用的思想。这应该被认为是迄今为止最大粒度的复用。

如果建筑师可以把自己以前的建筑蓝图拿来稍作修改就可以进行多次施工,那么软件架构师们为什么不能拿过去的系统设计方案稍作修改并实施到新的项目中去?但是很可惜,没有一个企业的业务流程和另一个企业是完全相同的。所以软件体系结构的复用起来比建筑蓝图的复用要复杂的多。

软件体系结构直接决定了软件系统的运行框架,其优劣不但决定了软件系统是否可以满足针对此软件的功能需求,而且还决定了这些功能需求是否能被合理、高效地实现,即也决定了软件系统基本的非功能属性。

[1]、每个用户的非功能属性多多少少的有所不同,也就决定着软件体系结构的复用的复杂性。

 软件体系结构是描述软件单元(element)、软件单元的属性(property)以及这些单元之间关系(relationship)的结构

[2]、这里的软件单元应该就是构件。

软件体系结构是构建计算机软件实践的基础,与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样。没有蓝图就不能构建出雄伟的大厦。没有好的体系结构也就不能构造出庞大的系统。但是对于小型的系统,体系结构的思想似乎是一种多余。对于大厦,我们应该有建筑蓝图,但是对于建造小茅屋,似乎再画草图就是一种多余。软件体系结构表示了一个软件系统的高层结构,主要特点有:

 软件体系结构是一个高层次上的抽象,它并不涉及具体的系统结构(比如B/S还是C/S),也不关心具体的实现。

 软件体系结构必须支持系统所要求的功能,在设计软件体系结构的时候,必须考虑系统的动态行为。

 在设计软件体系结构的时候,必须考虑有现有系统的兼容性、安全性和可靠性。同时还要考虑系统以后的扩展性和伸缩性。所以有时候必须在多个不同方向的目标中进行决策。

  [3]、抽象的东西之所以对我们有指导的意义。是因为我们可以运用这个抽象的东西对具体问题做具体分析。法无定法,也就是这个道理。





本博客为学习交流用,凡未注明引用的均为本人作品,转载请注明出处,如有版权问题请及时通知。由于博客时间仓促,错误之处敬请谅解,有任何意见可给我留言,愿共同学习进步。
posted on 2008-11-30 20:35 Jack.Wang 阅读(3375) 评论(3)  编辑  收藏 所属分类: 架构师篇

Feedback

# re: 从建筑角度来看软件体系结构 2008-12-18 23:49
去  回复  更多评论
  

# re: 从建筑角度来看软件体系结构 2009-02-05 23:52 gavin.zheng
也许我们是真的在建造大厦,但觉不觉得建设的太过精巧了呢?
为了重钩, 付出了太多的东西, 想想c++, 为了减少一个单一函数的调用,使用inline, friend,...大量复杂的语法
我们现在:多层的划分,让层的跨度调用成为目标,比如说一个desktop app
事件的visitor层,action,login,model,dao... 一切配置好后,只需要层的调用,然后进行把资源性的东西缓存,非常美妙
可是觉得现在已经彻底脱离了这个样子, 看看我们现在编的代码就知道, 除开经典的流程性设计外, 基本上都是复杂了在复杂 看看spring 的core 只为了类信息的数据 写了那么大一个结构的包.....

这还是以前的追求吗?  回复  更多评论
  

# re: 从建筑角度来看软件体系结构 2009-02-05 23:52 gavin.zheng
越搞越复杂  回复  更多评论
  


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


网站导航: