《架构师》反思:软件架构设计
软件架构
架构的定义,在业界,目前主要分为两类:结构派 和 策略派。结构派认为架构是指软件中各构件的组织结构以及各构件之前的相互关系。策略派认为软件的架构设计是要为软件的每个重要的决择进行权衡,并作出最终决定。
架构,作为系统中最重要的组成部分,对整个系统有着重要的作用:
对于软件开发而言,首先,架构设计能使系统各方面质量达到预期的目标;其次,它能全过程指导开发、测试,并有效地管理软件的复杂性,降低维护成本。
在软件工程方面,架构设计能有效地支持计划的编制,支持冲突分析,使受益人目标一致。
目前对于软件架构的研究,还处于不成熟的阶段。在软件生命周期的各个阶段中,架构设计以及与软件工程的结合,也正处于摸索阶段,正在尝试如何让架构设计更好的指导工程的生命周期各阶段的活动。
ABSD
全称:Architecutre Based Software Development,即基于架构的开发方法。就是在架构设计后,以文档化的架构为系统的主线,指导并保证其它活动的顺利开展。
主要经历以下阶段:
从图中可以看出,ABSD是一个迭代的开发模型:在需求获取完成之后,需要提取出体系结构的需求,包括功能需求、质量属性及系统的约束,后再者将会成为影响架构设计的重点。架构设计到架构的复审,是一个较小的重复周期,目的是为了架构设计能通过审核达到预期的质量目标。当审核通过后,架构指导开发过程完成系统实现。过程中,可能会对架构进行演化,在一定程度上,也可以说是在做架构的重构,这时,需要再次重复整个过程,这是一个大的迭代。
具体的过程,请看以下几个图:
设计过程完成后,需要对架构进行文档化,主要输入两个文档:《架构规格说明书》、用于测试体系结构需求的《质量设计说明书》。
《质量设计说明书》中应该对质量目标进行定义,它也是后面进行架构评估的依据。定义时,可以依据ATAM中的5,具体内容参见本章的“架构评估”小节。
《架构规格说明书》中,应使用较成熟的架构描述方法对架构进行描述。如可采用业界目前比较认可的4+1视图。
文档的完整性是软件架构成功的关键。文档应该从使用者的角度进行编写,必须分发给所有与系统有关的开发人员、且必须保证开发者手上的文档是最新的。同时,这些输出的文档也应该面向架构评估。
复审之前,最好做一个较小的系统原型,以方便评估。
复审的目前是为了保证架构能满足软件的质量要求,架构设计的构件和层次要比较合理,架构的描述要清晰。
架构风络
其实,架构风格就是架构模式。
模式,是在一定的环境下,不断地重复出现的一种形式。也就是说,一个特定的架构模式,有其适用的使用场景。例如,最受欢迎的三层架构,在系统较小时就不太适用。又如,面向对象的架构,在对于以数据处理为核心的应用场景也可能不太适用,同时,对于查询密集的系统使用面向对象,极大影响系统性能,反倒成为一种反模式。
架构重用,是软件架构研究的核心目标之一。对架构模式的研究,可以极大的促进业界对软件架构的重用。
DSSA
由于一个领域中的核心领域对象往往不会发生改变,所以对它们进行研究,可以实现核心业务的积累和重用。由于整个领域中核心对象往往不会发生改变,而围绕它们的应用,按照应用程序的类别划分后,同一类别下的应用程序往往架构也是类似的。所以对一类系统进行架构分析,就是为了找出在此类系统中通用的架构模式。
GIX4项目也是使用了基于领域的架构。准确地说,GIX4的架构是使用了领域驱动、模型驱动的产品线架构。具体架构内容,会在后面的文章《架构设计师-GIX4-架构介绍》中介绍,其中会对DSSA如何在GIX4上应用做一个较全面的讲述。
架构评估
在架构设计的目的中,我已经说过,架构设计最重要的目的是为了让系统能满足预期的质量需求。所以,在架构评估阶段,最重要的也就是评估这个架构是否能满足质量需求。也就是说,架构评估,重点关注的是质量属性。
在《教程》中提到,本阶段需要使用场景的方式来定义产品的质量目标。其实不然,质量目标是架构设计的重要依据,往往是在架构设计的初始阶段就已经被定义好了,也就是前面提到的架构设计阶段的输出《质量设计说明书》。虽然那时的定义不一定完整,但是一样可以在架构评估过程中,先对它进行评估,然后就可以作为架构评估过程中质量评估的基准了。
其实,就大方向上看,架构评估也是架构设计的一个部分。评估的过程,就是各专家在一起对架构初稿进行审核、提问、反思、建议。架构师以一人之力,很难把一个大型系统的架构设计得天衣无缝;这时集多人的力量在一起对初稿进行评估,可以起到查漏补缺的作用。
小结
架构设计是软件设计过程中最重要的活动之一,架构设计的优劣直接影响到目标系统的各个质量属性。
我认为,基于架构的开发方法,是一个很重要的方法论,我们可以用它来保证软件达到质量标准,并指导整个开发过程。同时,可以结合目前业界流行的敏捷方法来实施,这样可以在不同高度对软件开发进行控制。
本文转自BloodyAngel博客园博客,原文链接:http://www.cnblogs.com/zgynhqf/archive/2010/09/13/1824764.html,如需转载请自行联系原作者

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
【LoadRunner技术讲座11】使用LoadRunner监测MySQL数据库的性能-方法一
方法一:要想使用LoadRunner监测MySQL数据库的性能,LoadRunner没有提供直接监测MySQL的功能,所以,我们需要借助sitescope监控,然后在LoadRunner显示sitescope监测结果,这样间接地监控MySQL性能。 相信大家对LoadRunner应该十分熟悉了,所以在这里,我大概介绍下sitescope的安装和使用。 sitescope是安装在被监测数据库所在的计算机上的,是一个比较新的软件,在网上很难下载在免费使用版,我是找了一下午才在一个论坛里找到一位老好心人上传的7.9.5版本和license,相当的好用,真是要谢谢这位兄台了!下载地址:http://bbs.51testing.com/viewthread.php?tid=80283 软件下载好后,安装应该很容易了。安装好后系统重启,再次开机时,会自动跳出sitescope的初始网页,要求输入license等资料。保存后自动跳出网页提示,输入对应的网址进入sitescope主界面。(sitescope是运行在浏览器上的一款软件,每次要打开时,只要打开浏览器输入对应的网址即可进入对应的sitesc...
-
下一篇
性能优化总结(一):前言
最近一直忙着学2010、WPF、看架构师教程、学英语,搞得都没时间写博客了。 最近在GIX4项目上做了一些性能方面的优化,为了方便和同事们分享经验,今天准备把一些相关的小技巧都写一下。这几个技巧并不难,也不是说设计得多好,而是我觉得它们很重要。记得我在做上一个Web系统时,也支持OO的业务富模型,其中大部分不太要求性能的场景中,我使用了LINQTOSQL来实现数据访问。而性能要求比较高的场景中,又使用了人工SQL来进行数据访问。但是在两种方式中,在对数据访问进行优化时,都使用了同样的方法。今天,在GIX4中又再次使用同样的方法。 可见,在面向领域模型进行编程的应用程序中,这样的优化方案可能会被经常使用到。今天要写的是以下两个主要的方案: 1. SQL加载聚合对象。 2. 数据预加载。 随手在记事本中写了下提纲,大概分两次写完,如下: Outline: Preview Aggregate Model SQL Why? Senarios. Shortcoming of lazy load SQL Design How to integrate it into our syste...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- MySQL数据库在高并发下的优化方案
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Dcoker安装(在线仓库),最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果