Flycoder

Flying with codes

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

  软件开发中常常会谈论到架构,架构涉及到的东西也是非常之多,团队中不同角色对架构会有不同的认识。但什么是一个好的架构设计呢,让我们根据自己的实际项目经历慢慢来探讨,有关架构观点均为个人观点,其中有不对或不妥之处还请各位指正。

 

何谓架构

      实际的项目开发当中我们常常会说三层架构,MVC、MVP、MVVM、SOA架构,BS架构,CS架构,分布式架构等等,那么到底什么是架构呢,架构来自建筑业,所以它应该继承有建筑行业架构的精髓,既所谓架构是人们对一个结构内的元素及元素间关系的一种主观映射的产物。架构从概念上有很多的版本,定义本身有很难得统一,但对于我们聚各家之长才能正确的理解架构。架构概念分为两大流派:组成派和决策派,架构是一系列重要决策的集合,这些决策通常和软件的组织,构成系统的结构元素以及接口的选择有关,这些元素在协作中表现出明确的行为并进一步组合构成更大规模的子系统。所以我们可以按照Shaw的架构定义去理解:“组件+架构”,当然其中细节部分需要我们进一步理解。

 

何谓好的架构

  上面说了架构来自建筑行业,一个好的建筑就要满足坚固持久,实用,美三个基本原则,就项目而言,一个好的架构不仅满足了系统的主要以及关键性的功能需求,同时对关键的非功能需求也做到了完善考虑,既达到了我们常说的关键性完整性。任何缺失关键性完整性的架构考虑都会造成项目后期的动荡,很有可能这部分缺失需要程序员去填充,这部分填充以后随着项目的扩大会慢慢腐蚀整个架构,即使这部分缺失由架构师去填充也会由于进入项目后期,时间、进度等因素不能有很好的考虑,从而影响整个架构风格的统一和质量的保证。

  高质量的软件架构应当具有如下的品质:

  1.  良好的模块化。每个模块职责明晰、模块之间松耦合,模块内部高聚合并合理地实现了信息隐藏,这部分是检验我们OOAD能力,模块化是体现  

     可扩展,可伸缩,可重用,可测试,易维护等特性的基础。

  2.  适应功能需求的变化,适应技术的变化。做到应用相关模块和领域通用模块的分离,技术平台相关模块和具体技术模块相分离,达到“隔离变化”的效果,同                  时可重用也得到体现。

  3.     对系统的动态运行有良好的规划。标识出主动模块,被动模块,明确这些模块之间的调用关系和加锁策略,同时说明关键进程、线程、排队、消息等机制。系                 统运行时的规划,可以给开发人员提供相应的指导,并保证系统非功能需求得以体现。

  4.   对数据的良好规划。不仅包括数据持久化存储方案,还有数据传递,数据同步,数据复制等策略。采用DDD进行开发也有必要在前期对数据做一个规划。

  5.  明确、灵活的部署规划,这里可移植,可伸缩,持续可用等质量属性得以体现。

 

成功架构的关键要素    

  1.  是否遗漏关键的非功能性需求。

     这里我们需要全面的认识需求,需求从不同级别分类:组织级,用户级,开发级。每个级别有可以从需求级别分类:功能需求,质量属性,约束。

  2.  能否应付数量巨大且频繁变化的需求,关键需求决定架构。

  3.  能否从容地设计软件架构的不同方面,这里架构设计方案覆盖范围需要达到一定的程度,多视图架构。

  4.  是否及早验证架构并作出了调整,架构设计成果及早验证,盲目假设架构方案可行遗患无穷。

 

以上只是泛泛而谈,对自己的认识做个总结,很多详细内容需分批来写。

 

 

posted on 2009-11-28 17:08  flycoder  阅读(302)  评论(0)    收藏  举报