《.NET应用架构设计:原则、模式与实践》新书博客--试读-1.1.2 架构师的职责

简介:

1.1.2   架构师的职责

既然已经了解架构的含义,那我们再来看看负责创建架构的责任人:架构师。
架构师这个角色在任何软件开发项目中都是最有挑战性的。
 
1. 架构师的领导与决策能力
    首先,架构师是一位技术领导,这意味着架构师除了拥有专门的技能外,还必须拥有领导能力,领导能力也要能体现在组织中的职位上。
 
    从职位上来讲,架构师是项目中的技术领导,应该拥有进行技术决策的权威。不过,很多时候架构师和项目经理的职责很容易让人混淆,下面用电影行业的职位来打一个比方,帮助大家了解他们的不同:项目经理是制片人(确保事情完成),而架构师是导演(确保事情正确地完成)。架构师和项目经理代表了这个项目的公共角色,对于项目外的关注人员来说,他们是主要的联系点。架构师尤其应该是创建一个架构及给组织带来价值的投资倡导者。
 
    在决策方面,架构师要综合考虑,果断下决定。例如,在某些情况不清楚或没有充足的时间探究所有的可能性及有交付压力的情况下,如果架构师不能进行决策,那是不行的。而且这样的环境会很常见,架构师要接受这个现实而不是设法改变它。
 
    有些时候,架构师会在决策时咨询其他人并营造其他人共同参与决策的环境,但是进行适当的决策仍然是架构师的职责,即使有时候这些决策并不总是正确的(当然,是事后才发现这些决策不正确的)。因此,架构师必须是厚脸皮的,因为他们可能必须纠正他们的决策并原路返回。
 
    没有决策能力的架构师会使项目慢慢被破坏。项目团队会对架构师失去信心,项目经理将会担心,因为这些等待架构师决策的事项没有进展。更加危险的是:如果架构师没有制定关于架构的决策并编写成文档,团队成员会开始制定他们自己的(可能是不正确的)决策。

2. 架构师的角色可能由一个团队来履行

 

    角色和人之间是存在差异的。一个人可能会履行很多个角色,一个角色也可能会由许多人来履行。由于架构师需要非常广泛的技能,所以,架构师这个角色可能会由多个人来履行,这时,架构团队中的每个人都可以充分运用他自己的经验来履行此角色。特别是在理解业务领域和各方面技术所必需的技能时,往往需要多人合作才能达到相关要求。有一点很重要,就是最终的团队必须平衡。
 
    如果架构师角色由一个团队来履行,拥有一个首席架构师就非常重要了,他是架构团队的协调人,经常会有先见之明。没有这个协调人,要让架构团队的成员创造出内聚的架构,或做出决策是很困难的。
 
    对于一个不熟悉架构概念的团队来说,为了达成共同的目的,建议团队应该创建并颁布一个团队规章。
优秀的架构师知道他们的优势和弱势。最优秀的架构通常由一个团队而不是个人创建的,这都是因为“众人力量大”,人多则见识更广和更深。

3. 架构师要理解软件开发流程

 

    大部分架构师曾经都做过开发人员(几乎是绝大部分架构师都是从开发人员走过来的),同时,架构师应该了解软件开发流程,因为这个流程能确保团队的所有成员协调的工作。
 
    这种协调性可以通过定义涉及的角色、从事的任务、创建的工作产品、不同角色之间的移交点来获得。因为在日常工作中架构师会影响许多团队成员,所以理解团队成员的角色和职责,理解他们正在生产和使用的东西对于架构师来说很重要。实际上,团队成员也非常希望架构师能够指导他们的工作。
 

4. 架构师掌握技术与设计知识

 

    架构设计会涉及技术知识,所以,一个架构师应该拥有一定程度的技术技能。不过,架构师不必是一个技术专家,他要关注的是技术相关重要因素,而不是细节(其实很多时候,架构师也是技术专家,而且对细节理解得非常深入)。架构师需要理解像Java EE.NET这样的平台上可用的关键框架,但是不必理解这些平台程序编程接口(API)的细节。
 
    架构师必须与项目中的开发人员打交道,只有当架构师承认开发人员的工作价值时,在架构师和开发人员之间的沟通才是有效的。这也说明了,架构师应该具有一定的编程技能,即使他们在项目中不必编写代码,也必须跟上技术更新的脚步。
 
    架构师应该有组织地参与开发,并且尽可能地参与代码的编写。如果架构师参与实现,开发团队会从架构师那儿获得见识。架构师还可以通过查看他们决策和设计的第一手结果来进行学习,从而对开发流程给出反馈。
 
    大部分成功的软件架构师都曾经是核心的编程人员。某种程度上来说,他们就是通过这段经历了解到业务的某些情况的。如果没有这些知识,要实架构上的重要元素(如源代码的组织、采用的编程标准)时,架构师将无法进行决策,架构师和开发人员之间将会存在沟通障碍。
 
    另外,设计是架构设计的核心。架构使关键设计决策具体化,因此,架构师应该拥有很强的设计技能。关键设计决策指的是关键结构的设计决策、特定模型的选择、指导规格说明书等。
 
    一个人不可能在短时间内获得设计能力,这是多年经验累积的结果。某些设计专家在回顾他们早期的工作时都会惊讶他们原来的设计是如此的不好。在学习一项新技能时,想要对此精通则必须进行设计实践。
 

5. 架构师要掌握业务领域的知识

 

    架构师除了掌握软件开发技术之外,还要理解业务领域相关知识(可以说是必须理解),以便担任利益相关者、用户(他们理解业务)及开发团队成员(他们更熟悉技术)之间的中间人。
 
    业务领域的知识除了使架构师更好地理解系统的需求之外,还能够确保他们及时捕获恰当的需求。另外,一个特定领域通常与应用到这个解决方案中的特定架构模型组(和其他资源)相关,知道这个对照关系可以极大地帮助架构师。
 
    因此,一个优秀的架构师通常会平衡掌握软件开发知识和业务领域知识。当架构师理解软件开发但不理解业务模型时,可能会开发出只反映出他所熟悉内容但无法满足需求的解决方案。
 
    熟悉业务领域使架构师能够预见到架构中可能发生的改变。既然架构受其部署的环境(包括业务领域)影响很大,对业务领域的正确认识会使架构师在可能改变的区域和稳定性方面做出更全面的决策。举例来说,如果架构师认识到在将来的某点必须符合新的调整标准,他会在架构中考虑这个需求。
 

6. 架构师是优秀的沟通人员

 

    在架构师相关的所有软技能中,沟通最重要。有效沟通所涉及的各个方面架构师必须全部精通。架构师尤其要拥有较强的口头、书面表达能力同时,沟通是双向的,架构师应该既是优秀的聆听者,也是优秀的观察者。
 
    有许多理由说明有效沟通是项目成功的基础。很明显,与利益相关者的沟通对于理解他们的需求,以及就架构相关问题与他们达成(并保持)一致来说非常重要。
 
    与项目团队沟通也是十分重要的,因为架构师不能只是简单地把信息传达给团队,他还要激发团队,比如他必须要传达(并强调)系统的愿景,让大家都了解这个愿景,而不是只有他自己理解并相信。
 
    同时,架构师也必须是一位比较好的谈判专家。对于架构设计的许多方面,架构师需要与众多利益相关者进行交流,其中的一些交流则需要谈判技巧。
 
    另外,架构师应特别关注如何在项目中尽可能早地把风险降到最小,因为这会对稳定架构所花的时间有直接影响。风险与需求(及需求中的变化)有关,消除风险的一个途径是精炼需求,以便这种风险不再出现,那么这就需要回退需求并和利益相关者达成一致意见了。在这种情形下,如果架构师是一位谈判高手,能够清晰明白地表明不同折中的后果,相信一定会事半功倍。

7. 架构师了解组织政策

    成功的架构师并不只是关心技术,他们还要对政治足够敏感,并且知道组织中的权力所在。他们可利用这些知识与恰当的人沟通,确保在项目的适当周期中获得相应的支持。
 
    政策包括大量的不确定性,这会使许多技术人员紧张,让他们感觉仿佛在“客场”比赛,他们正处于一个不利的位置,因为他们的技术不能发挥出多大的威力。
 
    实际上,组织中起作用的许多强制约束位于项目交付的系统之外,并且这些约束是必须考虑的。为了解决不同的意见,一个政策性流程是不可避免的。因此,与其谴责它,倒不如把政策理解成是处理不同意见的必然需求。
 
    京东地址: http://book.360buy.com/10893935.html
    卓越地址: http://www.amazon.cn/mn/dp/B006NS2N0S




















本文转自yanyangtian51CTO博客,原文链接:http://blog.51cto.com/yanyangtian/746208  ,如需转载请自行联系原作者








相关文章
|
3月前
|
存储 Shell Linux
快速上手基于 BaGet 的脚本自动化构建 .net 应用打包
本文介绍了如何使用脚本自动化构建 `.net` 应用的 `nuget` 包并推送到指定服务仓库。首先概述了 `BaGet`——一个开源、轻量级且高性能的 `NuGet` 服务器,支持多种存储后端及配置选项。接着详细描述了 `BaGet` 的安装、配置及使用方法,并提供了 `PowerShell` 和 `Bash` 脚本实例,用于自动化推送 `.nupkg` 文件。最后总结了 `BaGet` 的优势及其在实际部署中的便捷性。
173 10
|
4月前
|
存储 架构师 测试技术
架构之道——人人都是架构师
本文的探讨和编写主要围绕三个方面:架构是什么?架构师要解决的问题有哪些?解决这些问题的方法论是什么?最后作者希望人人都能具备架构师思维。
|
4月前
|
数据库 开发者
.NET 异步编程之谜:async/await 模式究竟隐藏着怎样的神奇力量?
【8月更文挑战第28天】在当今注重效率和响应性的软件开发领域,.NET 的 async/await 模式如同得力助手,简化异步代码编写,使代码更易理解和维护。通过后台执行耗时操作,如网络请求和数据库查询,避免阻塞主线程,显著提升系统响应性。此模式不仅适用于网络请求,还广泛应用于数据库操作和文件读写。合理使用 async/await 可大幅优化性能,但需注意避免过度使用、正确处理调用链及异常,以确保系统稳定性和高效性。深入探索 async/await,助您构建更出色的应用程序。
58 0
|
1月前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
2月前
|
缓存 NoSQL Java
秒杀圣经:10Wqps秒杀,16大架构绝招,一文帮你秒变架构师 (2)
高并发下的秒杀系统设计是一个复杂的挑战,涉及多个关键技术点。40岁老架构师尼恩在其读者交流群中分享了16个关键架构要点,帮助解决高并发下的秒杀问题,如每秒上万次下单请求的处理、超卖问题的解决等。这些要点包括业务架构设计、流量控制、异步处理、缓存策略、限流熔断、分布式锁、消息队列、数据一致性、存储架构等多个方面。尼恩还提供了详细的实战案例和代码示例,帮助读者全面理解和掌握秒杀系统的架构设计。此外,他还分享了《尼恩Java面试宝典》等资源,帮助读者在面试中脱颖而出。如果你对高并发秒杀系统感兴趣,可以关注尼恩的技术自由圈,获取更多详细资料。
秒杀圣经:10Wqps秒杀,16大架构绝招,一文帮你秒变架构师 (2)
|
1月前
|
JSON 算法 安全
JWT Bearer 认证在 .NET Core 中的应用
【10月更文挑战第30天】JWT(JSON Web Token)是一种开放标准,用于在各方之间安全传输信息。它由头部、载荷和签名三部分组成,用于在用户和服务器之间传递声明。JWT Bearer 认证是一种基于令牌的认证方式,客户端在请求头中包含 JWT 令牌,服务器验证令牌的有效性后授权用户访问资源。在 .NET Core 中,通过安装 `Microsoft.AspNetCore.Authentication.JwtBearer` 包并配置认证服务,可以实现 JWT Bearer 认证。具体步骤包括安装 NuGet 包、配置认证服务、启用认证中间件、生成 JWT 令牌以及在控制器中使用认证信息
|
2月前
|
缓存 NoSQL Java
秒杀圣经:10Wqps高并发秒杀,16大架构杀招,帮你秒变架构师 (1)
高并发下,如何设计秒杀系统?这是一个高频面试题。40岁老架构师尼恩的读者交流群中,近期有小伙伴在面试Shopee时遇到了这个问题,未能很好地回答,导致面试失败。为此,尼恩进行了系统化、体系化的梳理,帮助大家提升“技术肌肉”,让面试官刮目相看。秒杀系统设计涉及16个架构要点,涵盖业务架构、流量架构、异步架构、分层架构、缓存架构、库存扣减、MQ异步处理、限流、熔断、降级、存储架构等多个方面。掌握这些要点,可以有效应对高并发场景下的秒杀系统设计挑战。
秒杀圣经:10Wqps高并发秒杀,16大架构杀招,帮你秒变架构师 (1)
|
2月前
|
网络协议 大数据 网络架构
桥接模式和NET模式的区别
桥接模式和NET模式的区别
47 0
|
3月前
|
数据采集 JSON API
.NET 3.5 中 HttpWebRequest 的核心用法及应用
【9月更文挑战第7天】在.NET 3.5环境下,HttpWebRequest 类是处理HTTP请求的一个核心组件,它封装了HTTP协议的细节,使得开发者可以方便地发送HTTP请求并接收响应。本文将详细介绍HttpWebRequest的核心用法及其实战应用。
153 6
|
4月前
|
Linux iOS开发 开发者
跨平台开发不再难:.NET Core如何让你的应用在Windows、Linux、macOS上自如游走?
【8月更文挑战第28天】本文提供了一份详尽的.NET跨平台开发指南,涵盖.NET Core简介、环境配置、项目结构、代码编写、依赖管理、构建与测试、部署及容器化等多个方面,帮助开发者掌握关键技术与最佳实践,充分利用.NET Core实现高效、便捷的跨平台应用开发与部署。
364 3
下一篇
DataWorks