软件架构系列感想(二)

3、软件架构师是什么?

应用程序架构的关注点是应用程序,通常包括将应用程序解构为类和组件,确保设计模式的正确应用,构建和使用框架等等。本质上,应用程序架构谈论的是软件设计的低级别切面,通常只考虑单一的技术栈。

结构单元主要以软件为基础,包括编程语言和结构、类库、框架、api等。它由类、组件、函数、模块、设计模式等加以描述。应用程序架构着重考虑软件和代码组织。

大多数软件系统实际上是由横跨不同层次和技术的多个应用程序组成,每个部分都有自己的应用程序架构,因此系统架构还关注互操作性与环境中其他系统的集成。跟应用程序架构相比,系统架构描述为从组件和服务到此系统等更高层次的抽象。

从代码结构和基础到将代码成功部署到生产环境,与一个软件系统重要元素相关的所有东西就是软件架构。

从开发者的角度考虑,软件开发关注点多数会放在代码上,在这里我们考虑的是有助于构建更好软件的东西,比如面向对象的原则、类、接口、控制反转、重构、自动化单元测试、代码整洁和其他不胜枚举的技术实践。

4、细节同样重要。

(1)横切关注点,比如登陆和异常处理

(2)安全性,包括认证、授权和敏感数据保密

(3)性能,可伸缩性和可用性和其他质量属性

(4)审计及其他监管需求

(5)客观环境的约束

(6)互操作性、与其他软件系统的集成

(7)运营、支持和维护的需求

(8)结构和整个代码库解决问题、实现特性的方法的一致性

(9)评估正在构建的基础有助于交付按计划进行

5、敏捷方法——快速行动,拥抱变化,持续交付,接收反馈,不一而足。

以敏捷方式交付软件,并不能保证得到的软件架构是敏捷的。

如果你的软件团队交付的软件跟不上所处环境的变化,就不算敏捷。

小型、松耦合的组件和服务可以孤立的构建、修改和测试,甚至根据需求变化移除和替换。因为能够加入新组件、服务并在需要时扩展,这种架构风格也很适合非常灵活和可适配的部署模型。

6、所有架构都是设计,但并非所有设计都是架构。

架构反映的是一个系统成型的重要设计决策,而重要性则通过改变的成本来衡量。

(1)系统的形态(例如,客户端—服务器、基于Web、原生移动客户端、分布式、异步等等)

(2)软件系统的结构(例如,组件、层、交互等等)

(3)技术选择(编程语言,部署平台等等)

(4)框架选择(例如,Web mvc框架,持久性/ORM框架等等)

(5)设计方法/模式选择(例如针对性能,可伸缩性、可用性等的方法)

引入额外层的决策就是将某一个部分从软件系统中解耦的经典技术,促进了低耦合、高内聚和更好的关注点分离。

软件系统架构流程的一部分就是搞清楚哪些是重要的以及为什么。

7、软件架构是关于结构和愿景的,多思考这些问题:

你的软件系统有良好定义的结构吗?

团队里每个人都以一致的方式实现特性吗?

代码库的质量水平一致吗?

对于如何构建软件,团队有共同的愿景吗?

团队里每个人都得到了足够的技术指导吗?

有适当的技术领导力吗?

8、软件架构的好处

让团队跟随一个清晰的愿景和路线图,无论这个愿景是一人所有还是整个团队共有

技术领导力和更好的协调

与人交流的刺激因素,以便回答重要决策、非功能需求、限制和其他横切关注点相关的问题

识别风险和减轻风险的框架

方法和标准的一致性,随之而来的结构良好质量优秀的代码库

(好的架构是)正在构建的产品的坚实基础

对不同的听众,以不同层次的抽象来交流解决方案的结构。

9、软件架构的角色:

1、架构驱动力——首先要理解业务目标和管理架构驱动力,其中包括需求(功能性需求和非功能性需求)和环境的限制。

2、设计软件——关键部分是技术选择,还有其他因素,包括成本、许可、供应商关系、技术战略、兼容性、互操作性、支持、部署、升级策略、最终用户环境等等。

3、技术风险——技术选择其实就是风险管理,所有的技术决策,在作出选择时都要把全部因素考虑在内,这些技术决策也需要评审和评估。这可能包括一个软件系统所有的主要结构单元,下至在开发过程中引入的库和框架。软件最大的一个问题就是,它复杂而抽象,很难通过图表甚至代码本身可视化一个软件在运行时的特征。

4、架构演化——软件先被设计好,然后交给它的开发团队,在整个交付过程中依据不断变化的需求和团队反馈来对其演化。

5、编写代码——许多软件架构师都是构建大师,所以经常练手是有意义的。

6、质量保证——质量保证应该是软件架构角色的一部分,但它的内容不只是代码评审。你要保证一条基线,它可以是引入一些标准和工作实践,如编码标准、设计原则和工具。

10、软件架构师在满足非功能性需求、进行技术质量保证、确保软件符合其用途等方面,要承担很大的责任。这是一个领导的角色,编码是保证项目成功最好的方式之一。

还需要回答以下类型的问题:

和其他可选技术相比,我们所选的技术是否最合适?

对该系统的设计和构建,还有那些选择?

是否应该采用一种通用的架构模式?

我们是否明白所做决策的利弊?

我们照顾到了品质属性的需求吗?

如何证明这种架构行之有效?

11、软技能和交际能力也很重要:

领导力;沟通;影响力;信心;合作;指导;辅导;动力;责任感;保持积极;

猜你喜欢

转载自blog.csdn.net/e5Max/article/details/81585368
今日推荐