《Microsoft.NET企业级应用架构设计(第2版)》——1.2 谁是架构师

1.2 谁是架构师

如你所见,架构通常是关于难以更改的决定。需要有人做出这些决定。

架构设计基于需求分析。分析确定系统要做什么;架构决定如何去做。需要有人了解这个“什么”来确定这个“如何”。

架构师正是把需求和规范关联起来的专家。但架构师的职责是什么?需要哪些技能?

1.2.1 架构师的职责
根据ISO/IEC 42010标准,架构师是负责系统架构的个人、团队或组织。架构师与分析师和项目经理互动,评估和提议系统方案,以及协调开发团队。

架构师参与开发流程的所有阶段,包括需求分析和架构设计、实现、测试、集成以及部署。

具体而言,架构师的主要职责是:确认需求,把系统分解成更小的子系统,识别和评估技术,以及制定规范。

1.确认需求
在软件项目里,有些事情是在架构师参与进来之前发生的。一群分析师、IT经理以及高管见面、讨论、评估以及谈判。一旦确认新增的或者更新系统的需求,而且也有预算,分析师就会引出需求,这通常基于他们对业务、公司流程、环境以及最终用户反馈的了解。

当需求列表准备好时,项目经理通常会与架构师见面,交付一堆东西,然后说:“这是我们(认为我们)想要的,现在你来构建它。”

架构师确认需求,尽力在设计里采用和满足它们。

重要:
刚刚我们提到另一个角色:项目经理。项目经理这个角色在不同公司可能有不同定义。我们认为这个角色负责选定方法学,安排工作,跟踪进度,回报情况,以及充当技术人员和业务人员之间的有效桥梁。充当这个角色的人与充当架构师角色的人可以是同一个人。当这种情况发生 时——而且并不罕见——需求就会从领域专家直接流向开发团队。如果中间有其他人,就会出现领域知识存在误差的风险,就像那个儿童游戏,一个孩子在另一个人的耳朵里小声地说一个词。第二个孩子告诉第3个,如此类推,直到无法猜到原词是什么为止。因此,通过统一语言表达的需求不经过中间渠道或只经过直通渠道(pass-through layer)从领域专家流向开发团队的过程非常关键。
2.分解系统
根据需求,架构师把整个系统描述成在进程里运作的更小的子系统和组件的组合。在这种情况下,架构师构想逻辑层、服务,或者两者都有。然后,根据环境,架构师决定各层的接口,与其他层的关系,以及系统所需的服务级别。

注意:
在这个阶段里,架构师评估各种架构模式。逻辑层是一个常见的选择,也是贯穿本书的一个选择。逻辑层要求垂直分布功能。分区(partitioning)是另一种方案,所有部件都在同一逻辑层次上,分布在一些共享实体(如对象模型或数据库)周围。面向服务架构(SOA)和六角架构(Hexagonal Architecture,HA)等模式倾向于让组件(SOA里的服务,HA里的适配器)在同一逻辑层次上运作和交互。微服务是另一个新近的架构模式,它的核心概念是专门和独立的组件。
整体设计要与企业目标和需求保持一致。特别地,整体设计是由需求驱动,而不是驱动需求。

理论上,产生的架构受到一般原则的启发,比如说,降低组件之间的耦合性,提高组件内部的内聚性,以及赋予每个组件一组清晰的职责。

产生的架构也会受到非功能性需求的驱动,比如说,安全、可伸缩性,以及允许或禁止的技术。所有这些方面都引入了进一步的限制,在一定程度上界定了架构师可以寻找解决方案的范围。

最后,架构师也会制定策略,根据系统的布局把每个组件的开发任务分配给个人开发者或者开发团队。

重要:
软件架构没有绝对真理。没有数学规律(或者建筑工程里的建筑条例)可以帮你做出选择。X公司可能发现A架构很成功,与此同时,Y公司却抛弃了它,采用B架构。事实上,两个都可能完全正确。上下文才是王道,要相信直觉。
3.识别和评估技术
确定需求并设计系统的各层之后,架构师接下来需要把逻辑组件关联到具体的技术和产品。

架构师通常了解可能与项目内容有关的产品和技术的代价和好处。架构师推荐使用的任何技术和产品都是他认为对项目有利和划算的。

架构师没有选择技术,只是根据自身技能提出建议。

架构师可能会建议使用Microsoft SQL Server 2014,因为它的新的聚集列存储索引(clustered column store indexes),或者可能选择由ASP.NET Web API后端支持的单页Web应用程序。类似地,架构师可能会提倡使用本地NoSQL文档存储而不是某种云端表存储。

谁对使用哪些技术和产品做最终决定?

一般是项目经理或者管理预算的人。架构师的建议可能被接受,也可能被拒绝。如果建议被拒绝,那么使用或者不使用某个产品或者技术就会变成一个新的非功能性需求,它甚至可能对架构产生重大影响。

4.制定规范
架构师最终负责系统的开发以及协调开发团队的工作。技术规范是架构师与开发者沟通架构决定的手段。

规范可以有多种形式:UML草图、Microsoft Word文档、Microsoft Visio图表,或者可工作原型。

沟通对架构师来说是非常关键的。沟通会发生在架构师与开发者之间,也会发生在架构师与项目经理和分析师之间,如果不提用户的话。架构师需要具备的一个重要特征是语言清晰。

架构师与开发者之间的互动会因为所选的方法学而有所不同。项目经理、分析师和用户的参与也会因为你所接受的敏捷级别而有所不同。

1.2.2 架构师的角色
架构通常预示了一个被称为“架构师”的角色。根据ISO/IEC,架构师没有不同类型。架构师就是架构师。仅此而已。

但是,如果你环顾周围(以及查看简历),你会看到不少架构师的定义。最终,这是一个被过度使用的词,根据环境、公司,甚至国家,它真的会有非常不同的含义。

1.你知道多少种架构师
在美国,企业架构师(Enterprise Architect,EA)几乎与应用程序开发毫无关系,因为这个角色的人有90%的时间都在关注与IT相关的业务策略、业务编排以及基础设施。简单地说,EA是把业务和IT结合起来的人。这个角色的人选可能对软件架构知之甚少,甚至对分层架构或DDD一无所知。

在很多公司里,负责艰难决定以及建议方案和技术的角色甚至不被称作“架构师”,得到的头衔可能是首席开发者或者类似的名称。

因此,你可以找到企业架构师、基础设施架构师(Infrastructure Architect,IA)、特定技术架构师(Technology-Specific Architect,TSA)以及解决方案架构师(Solution Architect,SA)等称号。所有这些差异都是某种误导,因为它们试图把最终不可分割的复杂角色分解成不同部分。我们认为,它创造了不必要的分类,种下了困惑的祸根——“谁做什么”场景。

在这本书里,我们使用ISO/IEC的架构师定义,即“负责系统架构的个人、团队或者组织”。把这个概念对应到大多数公司就会发现我们所说的架构师是软件(或解决方案)架构师或者首席开发者。

2.架构师的角色
你可能已经有所了解,但如果你去Microsoft TechEd大会,你会发现架构这边几乎没有关于软件开发和架构的现实问题的会议。由于这个原因,我们在过去这些年里提交的大量DDD会议常常被拒绝。除了Microsoft TechEd大会的员工,架构师通常是关注企业架构的角色。而Microsoft TechEd大会上的所有DDD会议都属于开发这边!

在同一个项目组里有多个架构师是没问题的。同样地,不同的架构师拥有稍微不同的技能,即使不是最想要的,也是没问题的。但是,正如我们在本书里强调的,不管官方头衔是什么,架构师与代码有着密切的联系。他们构思系统的设计,然后与开发者密切合作,确保恰当实现。

我们认为,除了其他方面,架构师是一个更好的更有经验的开发者。我们不相信只会使用UML和Visio并把实现细节扔给开发者的架构师是有价值的。至少,当遇到这些人时,我们从未发现他们易于相处。

1.2.3 关于架构师的常见误解
通常,由于架构师这个术语存在各种含义,大量私下的定义和解释也导致了误解的增长。下面来看其中的一些定义,我们也想对它们进行澄清。

1.架构师是分析师
这个说法不实。架构师并不是分析师。

有时候,架构师可能会在捕获需求的过程中协助分析师澄清复杂的需求,或者清除仅为“完整性”而添加进来的千奇百怪的需求。有时候,架构师可能会与利益相关者会面。但也仅此而已。

一般而言,分析师是领域方面的专家。架构师并不一定是这样的专家。分析师会与架构师分享关于系统应该如何工作以及系统应该做什么的发现。

这个常见的误解可能是因为分析师这个词被赋予了不正确的含义。如果这个词只是表明某人对系统做了某些分析,那就很难否定架构师与分析师之间的相似性了。大约30年前,系统分析师这个术语是用来表明在设计系统时做出相关考量的专业能力。但是,那时的软件并不如今天那么重要,只是一个基本上基于硬件的系统的一(小)部分。

今天,分析师与架构师的角色通常被认为是不同的。架构师也很难充当分析师的角色。

注意:
由于角色并不总是严格划分,尤其在小公司里,同一个人可能既是分析师又是架构师。这只是意味着这个公司里有一个人很熟悉业务和流程,可以找出功能性需求,并把它们转化成开发者可以使用的规范。这些角色和职责仍是不同的,只不过这些不同的技能恰好体现在同一个人身上。
2.架构师是项目经理
这是另一个不实的说法吗?看情况而定。

架构师负责系统架构,同时协调和指导系统的开发。项目经理代表利益相关者,通过在一开始选择开发方法学来管理项目。然后,项目经理负责确保项目在时间和预算都有限的情况下开展时能够遵循架构。

如果细看架构师的角色和项目经理的角色,我们会发现它们是不同的。仅此而已。

但是,同一个人最后扮演两个角色也并非罕见。就像演艺界一样,这种事情很少发生在大公司里,但经常发生在小公司里。

总之,如果你以后想成为一名架构师,你不一定要培养项目管理方面的技能。但是,如果你拥有两个角色的技能,你可以尝试拿两份薪水。

3.架构师从不写代码
这绝对是当下热议的问题:架构师应该写代码吗?基本上有两派观点。

一派认为架构师在楼上工作,或许是顶楼。架构师仅在需要通过图表展示他们对系统的看法时才会走下开发者所在的楼层。完事之后,他们乘坐电梯上去,收拾他们的东西,然后出去打高尔夫球了。到了球场,他们会关闭他们的手机,专心打球。打完球时,如果他们发现一两个未接来电,他们会打电话回去,向那些愚笨的开发者解释图表上已经清楚说明但开发者仍然未能理解的东西。根据这一派的观点,架构师从不亲手敲下哪怕最简单的C#语句。C#?噢,不,他们接触过的最新语言,在学校里可能是Pascal,在家里可能是Visual Basic。

相反,另一派认为每个架构师本身都是开发者。把这个比喻推而广之,我们可以说,Architect这个类继承自Developer这个类,添加了一些新的方法(技能),同时又重写了(特化)另一些方法。成为架构师在一些开发者的职业生涯里是很自然的发展。架构师和开发者之间的基本差别是经验和教育。你可以通过工作积累经验,可以通过读好的书和上好的课来获得教育。此外,与普通开发者相比,架构师有能力从更高的层次看待系统。而且,架构师拥有很好的客户应对技能。

架构师可能不写太多产品代码。但他会写很多代码;他每天都实践编码;他了解编程语言、代码技术、库、产品、工具、CTP;他还使用最新的Visual Studio。在某些编程领域,架构师甚至比很多开发者了解得多。架构师可能会写工具帮助开发者提高生产力。更常见的情况是,架构师只是开发团队的一员。比如说,架构师写产品代码在敏捷环境里绝对是正常现象。在小公司里,不管选择哪种开发方法学,这也是正常现象。与此同时,在某些大公司的场景里,让架构师写产品代码可能非常奇怪,尤其是采用了传统的非敏捷的开发方法学。

我们两个呢?我们属于哪一派?

嗯,Andrea比Dino更像架构师,因为他在5楼工作。另外,Dino更像开发者,因为他写过好几本技术含量很高的ASP.NET书,更重要的是,他在二楼工作。但是,我们不打高尔夫球。Dino平时会打网球,而Andrea更喜欢壁球。我们刚被禁止采访第一派的观点。

注意:
“设计的人”和“构建的人”之间的区别在软件领域里很模糊,没有其他工程领域和它一样。这种区别一般是假定的而不是基于公认技能的。
典型的对照物是民用建筑。泥水匠具备工程师没有的独特技能。但是,没有泥水匠会质疑设计和计算,因为他们缺乏独立做出决定的技能。他们尽最大的能力完成自己的工作,完全专注于委派给他们的建筑工作。

在软件领域里,情况有所不同,因为架构师和开发者有着共同的根源。开发者越有能力,就越觉得自己可以讨论设计选择——通常都有理由。架构师对日常编程越是生疏,就越容易失去其他开发者的尊重。这导致了某种程度上的恶性循环,而当你改用敏捷方法学时,情况又会奇迹般地好转。

时间: 2024-08-26 17:11:01

《Microsoft.NET企业级应用架构设计(第2版)》——1.2 谁是架构师的相关文章

一起谈.NET技术,走向ASP.NET架构设计——第四章—业务层分层架构(中篇)

在上一篇文章中,我们讨论了两种组织业务逻辑的模式:Transaction Script和Active Record.在本篇中开始讲述Domain Model和Anemic Model. Domain Model 在开发过程中,我们常常用Domain Model来对目标的业务领域建模.通过Domain Model建模的业务类代表了目标领域中的一些概念.而且,我们会看到通过Domain Model建模的一些对象模拟了业务活动中的数据,有的对象还反映了一些业务规则. 我们就来看看电子商务系统的开发,在

走向ASP.NET架构设计第四章业务层分层架构(中篇)

在上一篇文章中,我们讨论了两种组织业务逻辑的模式:Transaction Script和Active Record.在本篇中开始讲述Domain Model和Anemic Model. Domain Model 在开发过程中,我们常常用Domain Model来对目标的业务领域建模.通过Domain Model建模的业务类代表了目标领域中的一些概念.而且,我们会看到通过Domain Model建模的一些对象模拟了业务活动中的数据,有的对象还反映了一些业务规则. 我们就来看看电子商务系统的开发,在

基于微服务和Docker容器技术的PaaS云平台架构设计

本文讲的是基于微服务和Docker容器技术的PaaS云平台架构设计[编者的话]在系统架构上,PaaS云平台主要分为微服务架构.Docker容器技术.DveOps三部分,这篇文章重点介绍微服务架构的实施. [3 天烧脑式容器存储网络训练营 | 深圳站]本次培训以容器存储和网络为主题,包括:Docker Plugin.Docker storage driver.Docker Volume Pulgin.Kubernetes Storage机制.容器网络实现原理和模型.Docker网络实现.网络插件.

如何实现高容量大并发数据库服务 | 数据库分布式架构设计

袋鼠学院和优云.阿里云联合举办的沙龙结束之后,总是有小伙伴们来问PPT内容,想要进一步了解Topic内容.(哦,对了对了,竟然还有小伙伴专门冲着袋鼠云去听沙龙,感动cry~~) 千呼万唤,忙成狗的袋鼠小妹终于把沙龙总结整理了出来(⊙o⊙) 本次沙龙的主题是"云时代下的运维管理实践",受邀请的演讲嘉宾,花名宏翊(经常关注袋鼠云的同学,肯定已经对这个名字很熟悉了),是袋鼠云首席数据库架构师,袋鼠学院数据库讲师. 呼应沙龙运维实践的主题,结合自己的专长领域,宏翊主要是从数据库领域来谈云时代下

微软Visual Studio 2010架构设计功能应用

随着软件开发日趋国际化,对软件的质量要求和管理也随之增高.微软看到了应用程序生命周期管理在业界逐渐被接受认可的趋势.在微软 VS2010(Visual Studio 2010 Ultimate)中,可以利用各种工具辅助每个关键环节进行管理(ALM)是其重要特性.Visual Studio经过近十年左右的发展,已经不再是仅仅面向某一个角色(开发人员)的工具,而是要服务于软件开发过程中的所有不同的角色(开发人员.测试人员.架构师.项目经理等),使其覆盖在整个软件开发生命周期(SDLC)中,本文将重点

十年磨一剑之架构设计

浓缩10年工作经历精华,结合电信领域和互联网领域的经验, 剥去架构设计高大上的神秘外衣,提炼架构设计的终极大法, 菜鸟也能做架构设计,架构设计不过如此.  主要内容包括: 1)什么是架构设计 2)架构设计的终极大法 3)架构设计的基本原则 4)如何提升架构设计能力 详细请点击下载:十年磨一剑之架构设计

restful 架构设计 原理 运用

问题描述 restful 架构设计 原理 运用 在网络应用中有restful架构已经很热很久了,但是我现在还不是很清楚到底什么是restful思想,原理,然后需要在项目中怎样去运用,希望大家能给我相关资料学习参考下,谢谢 解决方案 http://lwe.iteye.com/blog/1484781

用好Visual Studio 2010进行层架构设计

微软已经把VS 2010(Visual Studio 2010 Ultimate)功能融入到软件应用生命周期管理(ALM)中.在架构设计方面则是通过新的架构层关系图(Architecture Layer Diagram),以图形化的方式描述系统架构,从而使得项目中的技术人员或非技术人员都能以模型透过图形化的方式进行协作与设计,以及定义企业的系统功能. Visual Studio 2010提供针对不同功能层面的分析工具来辅助程序代码进行逆向工程.Layer Diagram可从高阶面来看架构:Arc

上云培训课程:在阿里云上进行通用架构设计

课程名称:在阿里云上进行通用架构设计   课程代码:ACA21201   课程介绍:云平台架构是指将ECS / SLB / RDS  / OSS / OCS / OTS / ODPS / CDN等云平台服务按照业务场景对不同资源类型的需求以合理的关联关系组合在一起.而架构设计是指按照业务需求选择最优的云平台服务部署对应的系统或存储对应的资源,并结合各个云平台的服务特性设计出高性能.高可用的组合方案,以最终满足业务系统运行的需求.本课程从理论.产品.技术.实践多角度结合,深入讲解如何在阿里云上进行

一起谈.NET技术,用好Visual Studio 2010进行层架构设计

微软已经把VS 2010(Visual Studio 2010 Ultimate)功能融入到软件应用生命周期管理(ALM)中.在架构设计方面则是通过新的架构层关系图(Architecture Layer Diagram),以图形化的方式描述系统架构,从而使得项目中的技术人员或非技术人员都能以模型透过图形化的方式进行协作与设计,以及定义企业的系统功能. Visual Studio 2010提供针对不同功能层面的分析工具来辅助程序代码进行逆向工程.Layer Diagram可从高阶面来看架构:Arc