软件架构系列感想(二)

FEniCS学习笔记01:centos7下通过conda安装FEniCSx0.7 2023年版本的Fenicsx0.7,官网推荐使用conda命令安装集成好的Python包,因此我们的安装思路是先安装Anaconda,再按照官网步骤安装Fenics。 阅读详情

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、软技能和交际能力也很重要:

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

基于YOLO26深度学习框架的智能停车场管理系统的算法研究实现方法 本文研究了基于YOLO26深度学习框架的智能停车场管理系统实现方法。系统采用CSPDarknet53作为主干网络,结合特征金字塔和注意力机制提升检测性能。通过数据预处理、模型训练和停车分析三个主要模块,实现了车位占用检测、车辆类型识别等功能。实验结果表明,该方法在检测精度和速度方面表现优异,为智能停车场管理提供了有效的技术解决方案。 阅读详情

相关推荐

电蚊拍为什么能秒杀蚊子?深入解析两种四倍压整流电路设计差异

本文深入解析电蚊拍秒杀蚊子的核心原理——四倍压整流电路设计,对比对称式与级联式两种方案的性能差异。通过详细电路分析、实测数据对比和选型建议,揭示高压电路设计的关键技术要点,为电子爱好者和工程师提供实用参考。

rust6ferris的博客 749

对软件架构设计的一些总结和理解

1. 软件架构设计的What & Why ● 啥是软件架构(Software Architecture)? 软件架构是指在一定的设计原则基础上,从不同角度对组成系统的各部分进行搭配和安排,形成系统的多个结构而组成架构,它包括该系统的各个组件,组件的外部可见属性及组件之间的相互关系。组件的外部可见属性是指其他组件对该组件所做的假设。 软件架构设计就是从宏观上说明一套软件系统的组成与特性...

cooldragon的专栏 14万+

医疗影像处理实战:如何用Slicer和Mimics将.nii.gz文件转为.ply格式(附避坑指南)

本文详细介绍了利用3D Slicer和Materialise Mimics软件,将医学影像中常见的.nii.gz格式文件转换为通用三维网格.ply格式的完整实战流程。文章重点分享了从数据分割、DICOM序列导出到高质量网格生成的核心步骤与关键参数设置,并提供了针对常见问题的避坑指南,旨在帮助医学影像研究者和工程师高效完成从体数据到三维模型的关键转换。

weixin_28304023的博客 103

软件架构系列感想(四)

1、技术约束。时间和预算是大多数软件开发者都熟悉的约束,还有一些在大型组织里经常碰到的一些技术相关的约束:(1)批准的技术清单(目的是限制组织必须支持,运行,维护和购买许可证的技术)(2)现有系统的互操作性(有时别的系统需要和你构建的系统整合,这时组织性的约束规定了你可以用于整合的协议和技术)(3)目标部署平台(包括嵌入式设备、windows或Linux服务器的可用性,以及云)(4)技术成熟度(有...

woshibendangao的专栏 431

Diffusion Model原理详解

Diffusion Model(扩散模型 )对标的是生成对抗网络(GAN),本文将用通俗的语言和公式为大家介绍Diffusion Model,并且结合公式为大家梳理Diffusion Model的代码。

weixin_42620109的博客 6098

用Python绘制DCA曲线详解及示例代码

在这篇文章中,我们将详细解释如何使用Python绘制DCA曲线,并提供示例代码。通过使用上述的示例代码和解释,你可以自己尝试不同的投资金额、期数和增长率来绘制自定义的DCA曲线。通过运行上述代码,我们将得到一个绘制了DCA曲线的图表。该图表将显示出DCA投资策略在给定投资金额、投资期数和增长率下的投资价值随时间的变化情况。在上述代码中,我们使用一个循环来计算每个投资期的DCA曲线值。现在,我们可以使用上述函数来计算DCA曲线的值,并将其绘制成图表。最后,我们返回计算得到的DCA曲线值列表。

TechPr的博客 1407

软件架构系列感想(一)

1、什么是架构?架构是一种能力,架构角色则是要求你在具体事物中行使某些行为,而架构师则是用来标识这些能力与行为的一个职务。对于不同的人来说,可能意味着什么是不一样的。模块、连接、依赖和接口;大局观;改变成本很高的事情;难以改变的事情;更加兼顾全局的设计;接口而非实现;审美(比如艺术般的整洁代码);概念模型;满足非功能需求/质量属性;每件事情都有架构;沟通能力(抽象、语言、词汇);计划;一定程度的严...

woshibendangao的专栏 1148

npm install failed如何办?

上网搜索,说是网络配置不太对。按照如下几步,保证解决问题。在运行npm install指令时,出现如下错误。

xiezhipu的博客 879

系统架构之感想

时下软件界,架构界吹起了微服务之风,软件从传统的CS到BS,从单体到多服务器,再到现在的微服务;很多伙伴们也跟着技术潮流越来越多的在关注学习或使用微服务解决项目中遇到的很多问题。本人也在软件行业20来年了,所谓活到老学到老,从软件开发,到软件设计,到软件架构,种种心路历历在目。不过现在我要说的并不是我自己的从业经历,而是我最近在架构方面的学习和领悟所感分享给大家。 ...

jeffpeng2007的专栏 1468

【雷达成像】基于matlab SAR雷达成像仿真【含Matlab源码 3750期】

SAR雷达成像仿真 完整的代码,方可运行;可提供运行操作视频!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 1084

boost::circular_buffer缓行缓冲区

1、circular_buffer实现了一个环形缓冲区,空间大小是固定的,当到达容器末尾时,将自动利用容器另一端的位置空间。 2、当程序需要容纳大量的元素,但多数情况下仅保存较少数量元素时可以使用circular_buffer_space_optimized,他可以有效的减少内存的占用,提高程序的运行效率。 3、主要接口: 4、实现一个生产者---消费者模式示例: #inc...

小米的修行之路 791

三大框架学习心得

一、框架概述 1、框架的意义与作用: 所谓框架,就是把一些繁琐的重复性代码封装起来,使程序员在编码中把更多的经历放到业务需求的分析和理解上面。 特点:封装了很多细节,程序员在使用的时候会非常简单。 2、三大框架: Struts2,Hibernate,Spring 3、学好框架: 由于框架中细节很多,知识点比较零散,课后总结和做好笔记就变得尤为重要。 二、关于三层架构 三、

y878759487的博客 6695

【100%通过率】华为od机试C卷【出差 / 员工派遣】Java&Go 实现

某公司部门需要派遣员工去国外做项目。现在,代号为 x 的国家和代号为 y 的国家分别需要 cntx 名和 cnty 名员工部门每个员工有一个员工号 (1,2,3,......),工号连续,从 1开始。部长派遣员工的规则:

MISAYAONE的博客 2639

软件架构系列感想(六)

1、代码不会讲述完整的故事。编写好的代码很重要,重构迫使我们考虑让方法变得更小、更可复用和自文档化,每个人都应该追求易于阅读、理解和维护的好代码。了解系统的设计意图,可以通过代码库如何被拆分为子项目、目录、包、命名空间等对整体架构做出一些判断,也可以根据对这个项目有限的了解、业务领域、你对团队如何构建软件的期望以及你对所用技术的知识,做出自己的假设。(1)软件系统如何融入已有的系统形态(2)为什么...

woshibendangao的专栏 420

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

软件架构系列感想(三)

1、未来的架构师在哪里?我们可能花了很长时间谈论编写代码、自动化测试、自动化部署、工具、各种技术,以及所有相关的流程,而可用的软件是关键。多想想这些问题:(1)你上次写代码是什么时候(2)你上次重构是什么时候(3)你上次测试你的代码是什么时候(4)你上次设计东西是什么时候(5)你上次从零开始设计一个软件系统是什么时候(6)你上次从零开始设计一个会由一个团队来实现的软件系统是什么时候2、有些人过于渴...

woshibendangao的专栏 385

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

软件架构系列感想(五)

1、通用的抽象集合。 可以将软件系统简单的理解成由多个容器构成,容器又由多个组件构成,组件由一个或多个类实现。 类(在一个面向对象系统里,类是最小结构单元) 组件(组件可以想象成一个或多个类组成的逻辑群组,通常由多个类在更高层次的约束下组合而成) 容器(指一个在其内部可以执行组件或驻留数据的东西) 系统(系统是最高的抽象层次,代表了能够提供价值的东西) 2、软件的静态视图。 语境(设...

e5Max的专栏 337

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

读《周志明的软件架构课》--学习笔记和感想随笔

主要记录对周老师的《周志明的软件架构课》的学习笔记,本篇章是对课程不可变基础设施部分的学习,从虚拟化的技术理解容器技术的产生和发展,从部署运维角度理解应用的封装,从网络虚拟化理解容器网络,从扩展的角度理解K8s的存储设计,从解耦的角度理解服务网格。从周老师的课程中可以以一种由浅入深的方式来探寻云原生技术的渊源、发展及使用。

wangchaodee的博客 792

架构漫谈阅读感想

这几天,读了老师推荐有关架构的一篇系列文章《架构漫谈》,其中通俗易懂的语言,风趣幽默的风格,形象明了的对比形式让我对架构有了更进一步的了解。何为架构?最早期社会我们一个人就可以完全独立生活完成衣食住行所有事情,随着需求的增加,比如说人类延续,人们开始群居。接下来人们发现各自有各自的长处,有的人种田厉害,有的人制作工具厉害,有些地方适合产出粮食,这就导致分工,各自做擅长的事情。由于每个人的...

weixin_30848775的博客 135

读《Code Complete》后的一点感想

软件工程,不只是编码。             ——题记 最近通读了一遍Code Complete,虽然看的不算十分细致,但是感触还是有不少。 在这学期开始之前,我始终以为,软件工程,不过就是一个编码的过程,充其量不同的人编码的效率不同罢了。不过,读过这本书以后,彻底改变了我的肤浅的看法。 书中的第一章叫做“欢迎进入软件构建的世界”,一开始就提及软件构建所涉及的活动:定义问题,需求分...

weixin_30724853的博客 177

什么是软件架构

一、概述  二、目的  三、项目背景  四、系统建设目标  五、参考资料  六、架构设计  六.1 架构分析  六.2 设计思想  六.3 架构体系  六.4 系统视图  六.5 模块划分  六.5.1 模块描述  六.5.2 模块接口  我们在做架构设计文档一般分为两个层面:  1 技术架构设计。  从技术的解决上来讨论,着重点是讨论采用什么样的技术,如

白及 1323

阅读王概凯老师架构漫谈系列总结

这学期在学软件体系架构的课程,老师推荐了王概凯老师的架构漫谈系列专栏,在阅读专栏之后,对于什么是架构,怎样做好架构,软件架构如何落地,如何写好程序等问题有了较深的理解,在此简单记录一下阅读之后的感想 架构漫谈第一篇主要在介绍什么是架构以及为什么会产生架构,在没有阅读文章以前,在学习中或许用到过架构的思想,但也是模棱两可,并不知道什么是架构,更不清楚是怎么产生架构的。王概凯老师提到,架构...

weixin_30387663的博客 285

jQuery源码学习感想

  还记得去年(2015)九月份的时候,作为一个大四的学生去参加美团霸面,结果被美团技术总监教育了一番,那次问了我很多jQuery源码的知识点,以前虽然喜欢研究框架,但水平还不足够来研究jQuery源码,那时我不明白他们为何要求那么高,现在才知道,原来没那么高,他问的都是jQuery最基本的框架架构,不过对于不知道的来说,再简单我也是不知道,那时写了一篇博文去吐槽了一下,那时候也是我自己...

153
上一篇: 软件架构系列感想(一)
下一篇: 软件架构系列感想(三)
e5Max
博客等级 码龄14年 145粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值