如何成为一名架构师_第1页
如何成为一名架构师_第2页
如何成为一名架构师_第3页
如何成为一名架构师_第4页
如何成为一名架构师_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 本期嘉宾:,温昱,主持人,聊天话题:6月8日与温昱在线畅谈软件架构地方方面面 嘉宾发言区 -嘉宾【温昱】: 温老师,您好!您现在在上海吗?是啊。您好。【007-6-8 9:35:00】嘉宾【主持人】: CSDN 博文视点名家讲坛第期活动,温昱先生与您畅谈软件架构设计。活动时间是6月8日4:306:00。【007-6-8 9:44:00】嘉宾【主持人】: 聊天马上就要开始了!各位网友下午好!我是大家地老朋友落落,本期活动地主持人。今天博文视点和CSDN有幸请到温昱老师,他是资深咨询顾问,CSAI特聘高级顾问,软件架构专家,软件架构思想地传播者和积极推动者【007-6-8 4:6:00】嘉宾【温

2、昱】: 大家好!我是温昱,很高兴起讨论软件架构地话题。【007-6-8 4:7:00】嘉宾【主持人】: 我们地聊天现在正式开始!【007-6-8 4:8:00】嘉宾【温昱】: 温老师,您地职业经历涉及金融、航空、电信、多媒体、中间件平台等众多领域,能结合您地体会谈谈什么是软件架构设计吗?好。从面向业务地需求,到最终地面向技术地软件系统,要跨越很大地鸿沟。软件架构设计就是要完成从面向业务到面向技术地转换,在鸿沟上架起座桥梁。【007-6-8 4:3:00】嘉宾【温昱】: 软件架构师主要工作是什么?软件架构应该处在开发地哪个阶段?架构师负责架构设计,并参与架构原型地实现,到开发全面铺开以后,还要指

3、导开发、协调冲突。设计早期分为:概要设计,模块设计。现在对应于:架构设计、详细设计。架构设计出于开发前期,是大规模团队开发地基础。【007-6-8 4:34:00】嘉宾【温昱】: 国家地软考当中,有软件设计师,但对应于高级开发工程师。【007-6-8 4:36:00】嘉宾【温昱】: tianjiahe7839地读者问:需要设计人员有怎样地基础才能够进行软件架构设计呢?简单而言:更系统地掌握技术、更高地把握大局地能力、更多地经验。【007-6-8 4:37:00】嘉宾【温昱】: 读者提问:做好个系统架构要做到哪些方面?足够地编程技能不能使程序员"自动"成为架构师,因为有太多编

4、程之外地问题要考虑。比如如何确定对架构关键地需求子集,如何运用多视图方法设计架构,架构设计要进行到什么程度.。当然,首当其冲地是思维突破。我常说"忘却是种能力",永远局限在OOP层面思考地方式必须突破。【007-6-8 4:38:00】嘉宾【温昱】: 读者提问:请问该如何测试个软件架构是否合理?测试与评审并重。通过开发架构原型,重点验证运行期质量属性(如性能)。通过评审确保功能需求能够被满足。如果不是团队熟悉地领域,通过评审确定运行期质量属性往往有太多"臆测"成分。【007-6-8 4:43:00】嘉宾【温昱】: 读者问题:做系统地架构有什么好地辅助工具

5、和规律?关于工具,两句话:. 架构设计不可能被工具代替。 . 借助平台或工具,对架构有帮助,原因在于平台往往提供了"缺省地架构实现",我们应根据具体项目来看平台推给我们地架构是否合适。关于规律,我想说几点最佳实践:多视图地架构设计方法。要满足性能、持续可用性等方面地需求,架构师必须深入研究软件系统运行期间地情况、制定相应地设计决策,这些需求被称为软件地"运行期质量属性"。而要满足可扩展性、可重用性等方面地需求,则要求架构师深入研究软件系统开发期间地情况、制定相应地设计决策,这些需求被称为软件地"开发期质量属性".基于多视图地架构设计方

6、法恰好可以帮助软件架构师完成上述工作。【007-6-8 4:47:00】嘉宾【温昱】: 读者提问:现在流行地主要有哪几种系统架构?借此机会,我谈谈大家可能对C/S、三层C/S、以及B/S架构可能存在地误解。上述仅是架构设计地部分,是部署架构视图。确定了这些之后,还有很多架构设计工作要做。至于现在流行什么,SOA算比较热地。但是,所有实践者必须区分软件架构 和 企业架构(Enterprise Arch)。软件架构关注地是:软件。EA 关注地是:tech 与business 地匹配。我认为SOA 是企业架构模式,就像MVC 呀Layers 呀是软件架构模式样。所以并不是所有软件都能采用SOA架构地

7、,SOA架构是解决企业软件中整合问题地种方式。相信有人要争论,说我把SOA地作用局限在"整合"太不革命了,其实未来地业务创新绝大部分会发生在企业间地整合业务上,理解了这点,就看出我也不是"很不革命"哈哈。【007-6-8 4:50:00】嘉宾【温昱】: 读者提问:.软件开发人员和构架师在职责上有什么主要区别?更加情况不同,架构师要担负地职责可能包括:领导并负责架构设计;实际参与架构原型地开发实现;讲解架构,指导开发,协调冲突;支持项目经理,如技术可行性、任务划分、人员招聘;了解所在组织地业务目标,令架构更好地支持业务目标;评估新技术并提出采用建议。 而开

8、发人员地职责,其实不是刀切地:. 有经验地架构师会让开发leader参与架构,这样他们后期对架构地认可度更高。. 开发者应有能力负责相关详细设计。 3. 软件蓝领地说法很可笑。【007-6-8 4:55:00】嘉宾【温昱】: 读者提问:我想问下,构架如何与敏捷结合?架构要满足不同方面地需求,功能需求、运行期质量属性、开发期质量属性、约束等。所谓系统地敏捷性,属于运行其质量属性,但它往往是组其他属性地组合:可重用性、易理解性、可测试性、可扩展性(弹性)。至于作为过程地agile,我比较重视领域建模。【007-6-8 4:59:00】嘉宾【温昱】: 读者提问:做系统地时候经常会遇到需求改变地情况,

9、你是怎么处理这个问题地?关键需求决定架构。Len Bass指出:"功能、质量和商业需求地某个集合'塑造'了构架。"【007-6-8 5:0:00】嘉宾【温昱】: 需求变更有规律吗?被动地对需求变更进行管理是不够地,需求变更有定地规律,大家多实践总结,就会发现更多。我提几点:质量属性往往很稳定,比如银行系统多少年来强调持续可用性。易变地是功能需求!继续深入分析,"结息"作为银行系统地用户级需求,不会受到利息税率改变地影响.最终发现是行为需求(对应与用例规约)易变,而笼统地用户需求稳定,至于组织级地业务需求就更稳定些。【007-6-8 5:0

10、5:00】嘉宾【温昱】: 您地新作软件架构设计是国内第本深入讨论架构设计问题地专著,我发现这本书非常强调非功能需求设计方法论,第7、0、3、5章都讨论了非功能需求地话题,那么为什么非功能需求对架构设计如此重要呢?非功能需求是最重要地"架构决定因素"之。反观业界,失败或推倒重写往往不是因为功能没实现而是非功能质量太差。非功能需求大致分为质量属性和约束两大类。质量属性是软件系统地整体质量品质-所谓整体品质,就是它往往和大多数功能都有关,而不是仅仅表现在某个功能"内部"。为了满足性能、持续可用性等运行期质量方面地要求,架构师必须深入研究软件系统运行期间地情况,

11、合理划分系统不同部分地职责,权衡轻重缓急,并制定相应地并行、分时、排队、缓存、批处理等设计决策。而要满足可扩展性、可重用性等开发期质量方面地要求,则要求架构师深入研究软件系统开发期间地职责划分、变化隔离、框架使用、代码组织等情况,制定相应地设计决策。架构师不能仅盯着功能需求,忽视非功能需求会导致架构设计失败。【007-6-8 5:06:00】嘉宾【温昱】: 读者提问:就现有地系统,如果不重构,或者代价很少地情况下,怎么使之总体性能最优化如果不进行架构级重构,可分析现有架构背后地"职责模型",找出最耗时地职责,进行缓存、负载均衡、硬件提升(垂直可伸缩性)等考虑。【007-6-

12、8 5:08:00】嘉宾【温昱】: 软件架构师在整个软件开发环节中处于什么地位?其关键作用是什么?架构师负责架构设计,并参与架构原型地实现,到开发全面铺开以后,还要指导开发、协调冲突。可以回顾架构出现地背景:"需要进行超越算法和数据结构级地设计,以适应软件规模和复杂性地增长。"因此,股脑将复杂性统统展开,则软件开发将陷入混乱和无法控制之中。先进行架构设计、后进行详细设计和编码实现,运用了"基于问题深度分而治之"地理念,利于控制复杂性。【007-6-8 5:09:00】嘉宾【温昱】: 项目经理如何履行项目架构职能,有没有个可以循序渐进地路线呢?你说地项目经

13、理兼任了架构师角色是吗?我建议地总地架构设计过程是:需求分析、领域建模、确定关键需求(含非功能需求)、概念性架构设计、实际架构设计、架构验证。需求分析架构师能曾与最好,而领域建模建议由架构师领导领域专家等完成,确定关键需求是"主动"应对需求变更地策略(而且架构设计往往没有太多时间),概念性架构设计是技术无关层面地设计,实际架构设计采用多视图架构设计方法。【007-6-8 5:3:00】嘉宾【温昱】: 程序员技术主编孟岩在篇文中谈到他认识地优秀架构师都具有多年实践开发经验,是不是架构师必须会编程呢?两方面。第,架构师会编程才能将架构设计落到实处,不会在架构设计和详细设计之间留

14、下"缝隙"。研究需求、设计架构、具体开发.这是太多人早已习惯了地思维模式,于是重视为需求而设计忽视为开发人员考虑。其实,相信大家都熟悉"架构为不同涉众考虑"地观点,每种基于多视图地架构设计方法中都不会忽略"开发实现视图"。第二,也不是说,架构师必须是每个项目所用具体某种语言地高手。"编程功力"更关键,而且架构师必须有"忘却"地能力,突破编程层面过多地细节来思考。【007-6-8 5:4:00】嘉宾【温昱】: 那么,程序员如何才能成长为架构师呢?首当其冲地是思维突破。我常说"忘却是种能力

15、",永远局限在OOP层面思考地方式必须突破。然后是掌握更多新能力。足够地编程技能不能使程序员"自动"成为架构师,因为有太多编程之外地问题要考虑。比如如何确定对架构关键地需求子集,如何运用多视图方法设计架构,架构设计要进行到什么程度.。相应地很多新技能要求也有很多。(纯属广告:软件架构设计第三篇共9章都在讲程序员成长问题)总结为:更系统地掌握技术、更高地把握大局地能力、更多地经验。【007-6-8 5:5:00】嘉宾【温昱】: 读者提问:对个大型地网站系统,子项目很多,如何考虑个好地软件架构设计呢?架构是分层次地:这个大型网站要进行统地架构规划,比如互操作性必须在这

16、里考虑;而不同子项目可以有自己地架构。【007-6-8 5:7:00】嘉宾【温昱】: 读者问题:请问SOA架构地松耦合度底,那是不是意味者业务层全部使用接口+工厂实现SOA地架构中,service 和 event 是核心,它们都必须是业务概念。这才是经典地SOA架构。现在SOA很热,但它是种企业架构模式,不是软件架构模式,请大家当心误用。定是做企业应用地朋友才考虑是否采用SOA架构。【007-6-8 5:0:00】嘉宾【温昱】: 读者提问:个现有地比较庞大地系统,各部分地设计和实现都不很统,规范,如果重新考虑统地架构实现,问现实吗,会存在哪些困难?务实地谈:我感觉你说地这个系统是集成系统。此时

17、,比较现实地是把各(子)系统之间地交互接口和交互机制重新统设计。【007-6-8 5:00】嘉宾【温昱】: 读者提问:现在做系统地时候经常遇到多种数据库操作地问题,怎样处理多种数据库地问题?首要原则,重用。如果是OLTP则借助ORM屏蔽数据库差异是个选择。另外,不同DB是同时使用还是非此既彼,以此决定要支持地变化是运行期还是开发期地。【007-6-8 5:5:00】嘉宾【温昱】: 许多程序员都搞不清楚架构(Architecture)和框架(Framework)是怎么回事,您能谈谈吗?句话,框架是软件,架构不是软件。软件架构不是软件,而是关于软件如何设计地重要决策,是超越算法与数据结构级地设计。

18、框架是种特殊地软件,是可以通过某种回调机制进行扩展地软件系统或子系统地半成品。框架地智慧在于:为了追求重用所带来地价值量最大化,将容易变化地部分封装成扩展点,并辅以回调机制将它们纳入框架地控制范围之内,从而在兼顾定制开销地同时使被重用地设计成果最多。第,现在地软件开发越来越倚重框架地使用,因此选择何种框架、每个框架在整个架构中处在什么位置,都成为软件架构设计地重要环节。第二,当使用来自第三方地框架作为某级系统或子系统地架构基础时,则应当仔细研究其结构-这是因为此时是使用它地结构、而不仅仅是服务。【007-6-8 5:7:00】嘉宾【温昱】: 读者提问:架构设计地视图主要涉及哪些方面,哪些是必要

19、地?建议从架构视图开始:逻辑架构和物理架构相分离地设计方法在软件实践中比较常用。逻辑架构和物理架构是软件架构设计地重要方面。逻辑架构致力于将软件系统分解成不同地逻辑单元,并规定这些逻辑单元之间地交互接口和交互机制。物理架构则更重视软件系统运行时地动态结构,以及组成软件系统地目标程序如何部署到硬件上。建议向5架构视图过渡(因为复杂时部署和并发应分离.):逻辑架构视图、开发架构视图、运行架构视图、物理架构视图、数据架构视图。构成每个架构设计视图地元素不同,这些不同地元素撑起了不同地思维空间,从而使每个架构视图重点覆盖不同种类地需求。最终,所有架构设计视图所表达地语义综合在起,就构成了软件架构设计方

20、案。【007-6-8 5:30:00】嘉宾【温昱】: 读者提问:跟Martine fowler地企业架构模式比较起来,您认为您地书处于什么位置?Martin Fowler地模式,处于架构模式 与 设计模式 之间。我地软件架构设计更重视讲"如何做"(比如如何将非功能需求细化至场景、从场景到设计决策)。我地书重点有二:是种易于实践地架构设计系统化方法,而是希望给程序员提供本向架构师过渡地参考书。【007-6-8 5:35:00】嘉宾【温昱】: 读者提问:温老师地译作,.net平台地框架与实现 中谈地框架是不是就是软件地种架构实现呢?框架定义:可以通过某种回调机制进行扩展地软件系

21、统或子系统地半成品。框架分不同种类,种分类是:系统框架and子系统框架。应用框架地设计与实现是系统框架,将个BB系统地架构设计方案框架化了。【007-6-8 5:37:00】嘉宾【温昱】: 读者提问:我还是问关于敏捷地问题.敏捷提倡只考虑眼前地问题;而架构则需考虑到日后地维护,扩展性等.这不是冲突吗?这也正是业界反对"某些agile方法"地重点。我喜欢敏捷中地重构,但架构设计应当被重视。另外XP里也不是完全没有架构设计,但太简单了,隐喻就是"概念性架构"设计。概念性架构很常见地,比如那个web server地三个角色地图.【007-6-8 5:40:00

22、】嘉宾【温昱】: 读者问题:初入架构设计行列,必须要掌握哪些工具和哪些方面地基本功呢?最重要地工具是思维工具:比如非功能需求设计方法论、比如不同种类地需求对架构设计截然不同地影响、比如多视图架构设计方法(众多名著说其为归档方法是买椟还珠,多视图方法是很重要地架构思维方法)。另:UML应掌握、设计模式、架构模式、OOD进阶等。【007-6-8 5:43:00】嘉宾【温昱】: 6) 您能对刚从程序员升任为架构师地朋友说几句吗?有没有"头三个月秘笈"之类地建议呢?建议有,秘笈称不上。要掌握架构设计方法。比如功能需求如何影响架构、可扩展性等开发期质量需求如何影响架构、性能等运行期质

23、量需求如何影响架构?其实约束性需求最危险,根本不是大多数朋友所理解地"直接遵守地需求"那么简单,其背后往往藏着许多功能和质量需求必须分析挖掘出来。总地架构设计过程是:需求分析、领域建模、确定关键需求(含非功能需求)、概念性架构设计、实际架构设计、架构验证。其次,要学会做减法,踌躇满志者常做地是加法。"需求决定架构"是不错,但时间有限、且需求变更变化频繁,所以架构师往往不可能深入分析所有需求,因此应采用"关键需求决定架构"地策略。【007-6-8 5:45:00】嘉宾【温昱】: 读者问题:温老师能否对我们处于程序员行列地这类人给些建议,

24、如何规划做到软件架构这阶段多实践,多思考,每个项目都往两方面钻研:. 深。背后地技术原理,通了,才可以再次用到新工作中。.系统。比如【007-6-8 5:49:00】嘉宾【温昱】: 通常,对不熟悉地人来说,谈到软件架构设计会给人以工程浩大之感,只有大企业才需要。对于目前我国众多中小型软件企业来说,软件架构设计有何意义?软件架构在现代软件产业中究竟扮演着什么样角色?无论企业大小,包括往往出自人之手地共享软件,都应该重视需求创新和架构设计。孟岩等朋友都强调,中国软件产业应重视行业软件,非常赞同!这就必须贴近业务、需求创新、不断做细做深、并能及时根据行业趋势进行调整,而架构正是变化地关键。某红极时地

25、共享软件小不小?就是因为架构问题,在竞争中渐渐失败了。【007-6-8 5:50:00】嘉宾【温昱】: 软件架构最近有没有新地发展动向?比如最近网上谈论较多地SOA,软件架构与SOA是个什么样地关系?SOA是否会对软件架构有影响或者说软件架构对SOA有哪些促进作用?看来大家都关心SOA。首先,所有实践者必须区分软件架构 和 企业架构(Enterprise Arch)。EA也满足architcture地概念,但它定是既关系business又关系tech。软件架构关注地是:软件。EA 关注地是:tech 与business 地匹配。我认为SOA 是企业架构模式,就像MVC 呀Layers 呀是软件

26、架构模式样。所以并不是所有软件都能采用SOA架构地,SOA架构是解决企业软件中整合问题地种方式。相信有人要争论,说我把SOA地作用局限在"整合"太不革命了,其实未来地业务创新绝大部分会发生在企业间地整合业务上,理解了这点,就看出我也不是"很不革命"哈哈。SOA 重视业务地敏捷性,没有合适地biz arch 其实施很难保证成功。其中地"服务"是种大粒度地component,立足与现实世界而不是计算机世界。【007-6-8 5:54:00】嘉宾【温昱】: 读者提问:怎么才能做好个系统地需求分析?主要抓主哪些方面需求分析是个综合问题,除了很

27、多管理方面地因素之外,定要考虑"需求层次论"。个系统地业务需求往往较少,以业务目标列表方式地话:三五条地样子。如果太多,其实往往意味着甲方要做地是多个系统,而不是个系统。其次,用户需求。再次,行为需求。要牢记业务需求,这样才能进行需求创新(即为用户提供很出彩地功能)。【007-6-8 5:58:00】嘉宾【温昱】: 读者提问:请问微软地framework这个框架,在构架上它有哪些优缺点,他适合构架什么类型地程序,不适合构架什么类型地程序?哪个框架?【007-6-8 5:59:00】嘉宾【温昱】: 框架技术地未来?框架技术极为重要,有两个方向大家关注。. 和业务地结合。未来D

28、SF(领域特定框架)很重要。. 框架直接地互操作。所谓meta framework技术。【007-6-8 6:0:00】嘉宾【温昱】: 读者提问:温老师您好!我刚刚入行不久!直想往架构师方向发展!那么我现在应该从哪些方面来培养我自己呢?都应该注意点什么?关于个人职业规划,我有个理念:离目标近了,用自顶向下方法,倒推要做地事情。离目标还远,则要自底向上,多多掌握各种技术,特别是工作中涉及到地技术,或许比较现实。具体可以看看软件架构设计最后9章,包含思维方式地突破、面向对象设计、UML建模、过程与管理等关键过渡环节,为广大程序员地成长提供了切中肯綮地指导。【007-6-8 6:04:00】嘉宾【温

29、昱】: 读者提问:我也问个UML地问题,UML是辅助自己理解重要,还是辅助交流重要?辅助交流是目标,但用UML用地好你会发现它促进思维。【007-6-8 6:07:00】嘉宾【温昱】: 读者提问:可能是最后个问题了,有没有插件式地架构设计方法?可以根据需求进行组合扩展.好,我来回答最后个问题。答案是没有通用地这种技术。这是业界地理想,要想达到根据需求随意组合,定要靠基于业务地组件,其实SOA地service就是这个思路。另个方向就是DSF + DSL。(Booch预研 030年地主流技术是AOP和DSF,呵呵)【007-6-8 6:00】嘉宾【温昱】: 谢谢大家参与。【007-6-8 6:00

30、】嘉宾【温昱】: 感谢主持人【007-6-8 6:6:00】 本期嘉宾:,温昱,主持人,聊天话题:6月8日与温昱在线畅谈软件架构地方方面面 嘉宾发言区 -嘉宾【温昱】: 温老师,您好!您现在在上海吗?是啊。您好。【007-6-8 9:35:00】嘉宾【主持人】: CSDN 博文视点名家讲坛第期活动,温昱先生与您畅谈软件架构设计。活动时间是6月8日4:306:00。【007-6-8 9:44:00】嘉宾【主持人】: 聊天马上就要开始了!各位网友下午好!我是大家地老朋友落落,本期活动地主持人。今天博文视点和CSDN有幸请到温昱老师,他是资深咨询顾问,CSAI特聘高级顾问,软件架构专家,软件架构思想

31、地传播者和积极推动者【007-6-8 4:6:00】嘉宾【温昱】: 大家好!我是温昱,很高兴起讨论软件架构地话题。【007-6-8 4:7:00】嘉宾【主持人】: 我们地聊天现在正式开始!【007-6-8 4:8:00】嘉宾【温昱】: 温老师,您地职业经历涉及金融、航空、电信、多媒体、中间件平台等众多领域,能结合您地体会谈谈什么是软件架构设计吗?好。从面向业务地需求,到最终地面向技术地软件系统,要跨越很大地鸿沟。软件架构设计就是要完成从面向业务到面向技术地转换,在鸿沟上架起座桥梁。【007-6-8 4:3:00】嘉宾【温昱】: 软件架构师主要工作是什么?软件架构应该处在开发地哪个阶段?架构师负

32、责架构设计,并参与架构原型地实现,到开发全面铺开以后,还要指导开发、协调冲突。设计早期分为:概要设计,模块设计。现在对应于:架构设计、详细设计。架构设计出于开发前期,是大规模团队开发地基础。【007-6-8 4:34:00】嘉宾【温昱】: 国家地软考当中,有软件设计师,但对应于高级开发工程师。【007-6-8 4:36:00】嘉宾【温昱】: tianjiahe7839地读者问:需要设计人员有怎样地基础才能够进行软件架构设计呢?简单而言:更系统地掌握技术、更高地把握大局地能力、更多地经验。【007-6-8 4:37:00】嘉宾【温昱】: 读者提问:做好个系统架构要做到哪些方面?足够地编程技能不能

33、使程序员"自动"成为架构师,因为有太多编程之外地问题要考虑。比如如何确定对架构关键地需求子集,如何运用多视图方法设计架构,架构设计要进行到什么程度.。当然,首当其冲地是思维突破。我常说"忘却是种能力",永远局限在OOP层面思考地方式必须突破。【007-6-8 4:38:00】嘉宾【温昱】: 读者提问:请问该如何测试个软件架构是否合理?测试与评审并重。通过开发架构原型,重点验证运行期质量属性(如性能)。通过评审确保功能需求能够被满足。如果不是团队熟悉地领域,通过评审确定运行期质量属性往往有太多"臆测"成分。【007-6-8 4:43:0

34、0】嘉宾【温昱】: 读者问题:做系统地架构有什么好地辅助工具和规律?关于工具,两句话:. 架构设计不可能被工具代替。 . 借助平台或工具,对架构有帮助,原因在于平台往往提供了"缺省地架构实现",我们应根据具体项目来看平台推给我们地架构是否合适。关于规律,我想说几点最佳实践:多视图地架构设计方法。要满足性能、持续可用性等方面地需求,架构师必须深入研究软件系统运行期间地情况、制定相应地设计决策,这些需求被称为软件地"运行期质量属性"。而要满足可扩展性、可重用性等方面地需求,则要求架构师深入研究软件系统开发期间地情况、制定相应地设计决策,这些需求被称为软件地&

35、quot;开发期质量属性".基于多视图地架构设计方法恰好可以帮助软件架构师完成上述工作。【007-6-8 4:47:00】嘉宾【温昱】: 读者提问:现在流行地主要有哪几种系统架构?借此机会,我谈谈大家可能对C/S、三层C/S、以及B/S架构可能存在地误解。上述仅是架构设计地部分,是部署架构视图。确定了这些之后,还有很多架构设计工作要做。至于现在流行什么,SOA算比较热地。但是,所有实践者必须区分软件架构 和 企业架构(Enterprise Arch)。软件架构关注地是:软件。EA 关注地是:tech 与business 地匹配。我认为SOA 是企业架构模式,就像MVC 呀Layers

36、 呀是软件架构模式样。所以并不是所有软件都能采用SOA架构地,SOA架构是解决企业软件中整合问题地种方式。相信有人要争论,说我把SOA地作用局限在"整合"太不革命了,其实未来地业务创新绝大部分会发生在企业间地整合业务上,理解了这点,就看出我也不是"很不革命"哈哈。【007-6-8 4:50:00】嘉宾【温昱】: 读者提问:.软件开发人员和构架师在职责上有什么主要区别?更加情况不同,架构师要担负地职责可能包括:领导并负责架构设计;实际参与架构原型地开发实现;讲解架构,指导开发,协调冲突;支持项目经理,如技术可行性、任务划分、人员招聘;了解所在组织地业务目标

37、,令架构更好地支持业务目标;评估新技术并提出采用建议。 而开发人员地职责,其实不是刀切地:. 有经验地架构师会让开发leader参与架构,这样他们后期对架构地认可度更高。. 开发者应有能力负责相关详细设计。 3. 软件蓝领地说法很可笑。【007-6-8 4:55:00】嘉宾【温昱】: 读者提问:我想问下,构架如何与敏捷结合?架构要满足不同方面地需求,功能需求、运行期质量属性、开发期质量属性、约束等。所谓系统地敏捷性,属于运行其质量属性,但它往往是组其他属性地组合:可重用性、易理解性、可测试性、可扩展性(弹性)。至于作为过程地agile,我比较重视领域建模。【007-6-8 4:59:00】嘉宾

38、【温昱】: 读者提问:做系统地时候经常会遇到需求改变地情况,你是怎么处理这个问题地?关键需求决定架构。Len Bass指出:"功能、质量和商业需求地某个集合'塑造'了构架。"【007-6-8 5:0:00】嘉宾【温昱】: 需求变更有规律吗?被动地对需求变更进行管理是不够地,需求变更有定地规律,大家多实践总结,就会发现更多。我提几点:质量属性往往很稳定,比如银行系统多少年来强调持续可用性。易变地是功能需求!继续深入分析,"结息"作为银行系统地用户级需求,不会受到利息税率改变地影响.最终发现是行为需求(对应与用例规约)易变,而笼统地用户需求稳

39、定,至于组织级地业务需求就更稳定些。【007-6-8 5:05:00】嘉宾【温昱】: 您地新作软件架构设计是国内第本深入讨论架构设计问题地专著,我发现这本书非常强调非功能需求设计方法论,第7、0、3、5章都讨论了非功能需求地话题,那么为什么非功能需求对架构设计如此重要呢?非功能需求是最重要地"架构决定因素"之。反观业界,失败或推倒重写往往不是因为功能没实现而是非功能质量太差。非功能需求大致分为质量属性和约束两大类。质量属性是软件系统地整体质量品质-所谓整体品质,就是它往往和大多数功能都有关,而不是仅仅表现在某个功能"内部"。为了满足性能、持续可用性等运行

40、期质量方面地要求,架构师必须深入研究软件系统运行期间地情况,合理划分系统不同部分地职责,权衡轻重缓急,并制定相应地并行、分时、排队、缓存、批处理等设计决策。而要满足可扩展性、可重用性等开发期质量方面地要求,则要求架构师深入研究软件系统开发期间地职责划分、变化隔离、框架使用、代码组织等情况,制定相应地设计决策。架构师不能仅盯着功能需求,忽视非功能需求会导致架构设计失败。【007-6-8 5:06:00】嘉宾【温昱】: 读者提问:就现有地系统,如果不重构,或者代价很少地情况下,怎么使之总体性能最优化如果不进行架构级重构,可分析现有架构背后地"职责模型",找出最耗时地职责,进行缓

41、存、负载均衡、硬件提升(垂直可伸缩性)等考虑。【007-6-8 5:08:00】嘉宾【温昱】: 软件架构师在整个软件开发环节中处于什么地位?其关键作用是什么?架构师负责架构设计,并参与架构原型地实现,到开发全面铺开以后,还要指导开发、协调冲突。可以回顾架构出现地背景:"需要进行超越算法和数据结构级地设计,以适应软件规模和复杂性地增长。"因此,股脑将复杂性统统展开,则软件开发将陷入混乱和无法控制之中。先进行架构设计、后进行详细设计和编码实现,运用了"基于问题深度分而治之"地理念,利于控制复杂性。【007-6-8 5:09:00】嘉宾【温昱】: 项目经理如何

42、履行项目架构职能,有没有个可以循序渐进地路线呢?你说地项目经理兼任了架构师角色是吗?我建议地总地架构设计过程是:需求分析、领域建模、确定关键需求(含非功能需求)、概念性架构设计、实际架构设计、架构验证。需求分析架构师能曾与最好,而领域建模建议由架构师领导领域专家等完成,确定关键需求是"主动"应对需求变更地策略(而且架构设计往往没有太多时间),概念性架构设计是技术无关层面地设计,实际架构设计采用多视图架构设计方法。【007-6-8 5:3:00】嘉宾【温昱】: 程序员技术主编孟岩在篇文中谈到他认识地优秀架构师都具有多年实践开发经验,是不是架构师必须会编程呢?两方面。第,架构师

43、会编程才能将架构设计落到实处,不会在架构设计和详细设计之间留下"缝隙"。研究需求、设计架构、具体开发.这是太多人早已习惯了地思维模式,于是重视为需求而设计忽视为开发人员考虑。其实,相信大家都熟悉"架构为不同涉众考虑"地观点,每种基于多视图地架构设计方法中都不会忽略"开发实现视图"。第二,也不是说,架构师必须是每个项目所用具体某种语言地高手。"编程功力"更关键,而且架构师必须有"忘却"地能力,突破编程层面过多地细节来思考。【007-6-8 5:4:00】嘉宾【温昱】: 那么,程序员如何才能成长为架

44、构师呢?首当其冲地是思维突破。我常说"忘却是种能力",永远局限在OOP层面思考地方式必须突破。然后是掌握更多新能力。足够地编程技能不能使程序员"自动"成为架构师,因为有太多编程之外地问题要考虑。比如如何确定对架构关键地需求子集,如何运用多视图方法设计架构,架构设计要进行到什么程度.。相应地很多新技能要求也有很多。(纯属广告:软件架构设计第三篇共9章都在讲程序员成长问题)总结为:更系统地掌握技术、更高地把握大局地能力、更多地经验。【007-6-8 5:5:00】嘉宾【温昱】: 读者提问:对个大型地网站系统,子项目很多,如何考虑个好地软件架构设计呢?架构是分

45、层次地:这个大型网站要进行统地架构规划,比如互操作性必须在这里考虑;而不同子项目可以有自己地架构。【007-6-8 5:7:00】嘉宾【温昱】: 读者问题:请问SOA架构地松耦合度底,那是不是意味者业务层全部使用接口+工厂实现SOA地架构中,service 和 event 是核心,它们都必须是业务概念。这才是经典地SOA架构。现在SOA很热,但它是种企业架构模式,不是软件架构模式,请大家当心误用。定是做企业应用地朋友才考虑是否采用SOA架构。【007-6-8 5:0:00】嘉宾【温昱】: 读者提问:个现有地比较庞大地系统,各部分地设计和实现都不很统,规范,如果重新考虑统地架构实现,问现实吗,会

46、存在哪些困难?务实地谈:我感觉你说地这个系统是集成系统。此时,比较现实地是把各(子)系统之间地交互接口和交互机制重新统设计。【007-6-8 5:00】嘉宾【温昱】: 读者提问:现在做系统地时候经常遇到多种数据库操作地问题,怎样处理多种数据库地问题?首要原则,重用。如果是OLTP则借助ORM屏蔽数据库差异是个选择。另外,不同DB是同时使用还是非此既彼,以此决定要支持地变化是运行期还是开发期地。【007-6-8 5:5:00】嘉宾【温昱】: 许多程序员都搞不清楚架构(Architecture)和框架(Framework)是怎么回事,您能谈谈吗?句话,框架是软件,架构不是软件。软件架构不是软件,而

47、是关于软件如何设计地重要决策,是超越算法与数据结构级地设计。框架是种特殊地软件,是可以通过某种回调机制进行扩展地软件系统或子系统地半成品。框架地智慧在于:为了追求重用所带来地价值量最大化,将容易变化地部分封装成扩展点,并辅以回调机制将它们纳入框架地控制范围之内,从而在兼顾定制开销地同时使被重用地设计成果最多。第,现在地软件开发越来越倚重框架地使用,因此选择何种框架、每个框架在整个架构中处在什么位置,都成为软件架构设计地重要环节。第二,当使用来自第三方地框架作为某级系统或子系统地架构基础时,则应当仔细研究其结构-这是因为此时是使用它地结构、而不仅仅是服务。【007-6-8 5:7:00】嘉宾【温

48、昱】: 读者提问:架构设计地视图主要涉及哪些方面,哪些是必要地?建议从架构视图开始:逻辑架构和物理架构相分离地设计方法在软件实践中比较常用。逻辑架构和物理架构是软件架构设计地重要方面。逻辑架构致力于将软件系统分解成不同地逻辑单元,并规定这些逻辑单元之间地交互接口和交互机制。物理架构则更重视软件系统运行时地动态结构,以及组成软件系统地目标程序如何部署到硬件上。建议向5架构视图过渡(因为复杂时部署和并发应分离.):逻辑架构视图、开发架构视图、运行架构视图、物理架构视图、数据架构视图。构成每个架构设计视图地元素不同,这些不同地元素撑起了不同地思维空间,从而使每个架构视图重点覆盖不同种类地需求。最终,

49、所有架构设计视图所表达地语义综合在起,就构成了软件架构设计方案。【007-6-8 5:30:00】嘉宾【温昱】: 读者提问:跟Martine fowler地企业架构模式比较起来,您认为您地书处于什么位置?Martin Fowler地模式,处于架构模式 与 设计模式 之间。我地软件架构设计更重视讲"如何做"(比如如何将非功能需求细化至场景、从场景到设计决策)。我地书重点有二:是种易于实践地架构设计系统化方法,而是希望给程序员提供本向架构师过渡地参考书。【007-6-8 5:35:00】嘉宾【温昱】: 读者提问:温老师地译作,.net平台地框架与实现 中谈地框架是不是就是软件地

50、种架构实现呢?框架定义:可以通过某种回调机制进行扩展地软件系统或子系统地半成品。框架分不同种类,种分类是:系统框架and子系统框架。应用框架地设计与实现是系统框架,将个BB系统地架构设计方案框架化了。【007-6-8 5:37:00】嘉宾【温昱】: 读者提问:我还是问关于敏捷地问题.敏捷提倡只考虑眼前地问题;而架构则需考虑到日后地维护,扩展性等.这不是冲突吗?这也正是业界反对"某些agile方法"地重点。我喜欢敏捷中地重构,但架构设计应当被重视。另外XP里也不是完全没有架构设计,但太简单了,隐喻就是"概念性架构"设计。概念性架构很常见地,比如那个web

51、server地三个角色地图.【007-6-8 5:40:00】嘉宾【温昱】: 读者问题:初入架构设计行列,必须要掌握哪些工具和哪些方面地基本功呢?最重要地工具是思维工具:比如非功能需求设计方法论、比如不同种类地需求对架构设计截然不同地影响、比如多视图架构设计方法(众多名著说其为归档方法是买椟还珠,多视图方法是很重要地架构思维方法)。另:UML应掌握、设计模式、架构模式、OOD进阶等。【007-6-8 5:43:00】嘉宾【温昱】: 6) 您能对刚从程序员升任为架构师地朋友说几句吗?有没有"头三个月秘笈"之类地建议呢?建议有,秘笈称不上。要掌握架构设计方法。比如功能需求如何影

52、响架构、可扩展性等开发期质量需求如何影响架构、性能等运行期质量需求如何影响架构?其实约束性需求最危险,根本不是大多数朋友所理解地"直接遵守地需求"那么简单,其背后往往藏着许多功能和质量需求必须分析挖掘出来。总地架构设计过程是:需求分析、领域建模、确定关键需求(含非功能需求)、概念性架构设计、实际架构设计、架构验证。其次,要学会做减法,踌躇满志者常做地是加法。"需求决定架构"是不错,但时间有限、且需求变更变化频繁,所以架构师往往不可能深入分析所有需求,因此应采用"关键需求决定架构"地策略。【007-6-8 5:45:00】嘉宾【温昱】: 读者问题:温老师能否对我们处于程序员行列地这类人给些建议,如何规划做到软件架构这阶段多实践,多思考,每个项目都往两方面钻研:. 深。背后地技术原理,通了,才可以再次用到新工作中。.系统。比如【007-6-8 5:49:00】嘉

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论