正视架构设计的重要作用

news2024/12/25 1:16:12

       要讨论软件架构设计在软件开发中的重要作用,首先让我们来了解一下目前国内软件的开发现状。
  总的来说,国内的多数企业仍然是采用“瀑布模型”作为软件开发过程的主要模型。虽然在采用瀑布模型的同时可能会引入原型法以及诸如MSF等其它软件开发方法与过程,但随着项目时间的推进,这种“瀑布模型”会慢慢演化为“边做边改模型”。


  从事过软件项目开发的专业人士都有这样的困惑:为什么到了项目接近尾声的时候,仍然还有那么多没有解决的问题?


  理论上讲,应该是先分析,后设计,再编码,那为什么项目在交货以后,我们还在不断的编写设计文档?为什么每次客户需求发生变更,我们又要投入大量的资源来应对不断变化的客户需求?为什么软件开发会碰到这么多困难,我们天天加班加点,不断地去解决开发中碰到的种种问题,可是问题越解决越多,得到的效果却那么不尽人意?

 
  项目出现这些问题,原因很多,概括起来可以分为两种:管理因素和技术因素。国内普遍重视管理因素,而忽视技术因素,所以出现层出不穷的问题也就无法避免。


  软件架构设计属于技术因素,它位于软件开发过程的前期阶段,架构设计的过程,是分析客户需求、挖掘非功能性需求、并将客户需求所定义的领域知识转化为软件系统模型的过程,由此可见,架构设计所涵盖的范围非常广泛。
  目前,国内对于软件架构的认识,还存在这样或那样的误区。难道只有当设计人员在为软件项目配备了充足的资源,然而却得不到预期的结果时,才会反思:是不是软件开发本身出现了问题?


  架构设计源于客户需求
  在进行需求分析的过程中,系统分析员将客户需求转化为计算机模型,然而在这个过程中,系统分析员本身的特性也就决定了这一角色很难把握住客户的非功能性需求。
  需求需要挖掘,尤其对于大型的软件系统而言,光靠系统分析员这个单一的角色,很难完成需求分析与挖掘的艰巨任务。在需求分析的过程中,架构设计师更为关注的是系统的非功能性需求,例如稳定性、可扩展性、可维护性、安全性、高效性等等,这些需求都是需要挖掘的。

 
  如何挖掘?挖掘方式取决于核心需求。举个很简单的例子,客户需要实现两个系统的数据传输,这是个核心功能性需求,而在这个需求的背后,还包括了“传输过程要求可靠”、“需要采用一种特定的数据格式进行传输”、“由于数据包含一定的机密因素,因此需要加密,并需要选择合适的加密算法”等等一系列的非功能性需求。


  此时,架构设计师不仅需要了解客户本身的功能需求,还需要能够发掘非功能需求。因此,优秀的架构设计师一定是一个经验丰富的需求工程师,需求分析让架构设计师知道,我需要考虑哪些因素,而深厚的软件技术功底让架构设计师知道,如何去考虑这些因素。可见,架构设计源于客户需求。


  架构设计源于对知识的不断积累
  首先应该认识到,没有对领域知识、软件系统特性与软件技术等的深刻理解,就无从谈及架构设计,而深厚的领域知识与技术经验则是源于不断的积累。


  目前,市场上确实很多产品在架构上已经非常成熟和稳定,但这些产品的成熟架构也是通过长期不断的实践与积累才逐步形成的。经验丰富的架构设计师可以在开发产品的同时总结出一套架构模式,这对维护产品的体系结构,以及开发同类产品都有深远的意义。
  从另一个角度讲,产品的架构并非一成不变,随着技术的不断创新与发展,新技术一定会被应用到现有的系统架构中。此时,软件架构可能需要进行调整,我们也不能再说,我们没有必要去关心这些产品架构了。

 
  架构设计是一种取舍过程
  实现某一非功能性需求,可以有很多种方法,但并不是每种方法都是最合适的,这在架构设计的过程中需要做出取舍。例如,为了使得软件系统具有易扩展、易更改的能力,我们可以采用插件体系结构或内嵌脚本系统结构,两者都可以使得软件系统具有方便扩展的能力。


  然而,如果客户的业务流程会经常变化,或者软件系统产品会应用到具有不同业务流程的多个客户时,采用后者可能会更加符合软件本身的特点。


  当今IT业技术层出不穷,在特定的应用场景中,采用何种技术何种模式最合适,这就是架构设计的取舍。JAVA和.NET孰好孰坏?讨论这样的问题也不再有意义。软件工程大师Martin Fowler曾经说过:架构师是对所有重要事情做出决定的人,这一决定也囊括了取舍。


  架构设计将服务于整个开发过程
  良好的架构设计不仅使得软件系统能够满足客户需求,它更为软件系统带来了安全性、稳定性、可扩展性等属性,而这些属性在应对客户需求变更、提高软件可测试性与可维护性、降低维护成本、提高开发效率等各方面都起着非常重要的作用。 


  客户所需要的是可以用于生产实践的最终产品,他们自然不会去关心你的软件系统采用何种设计和架构,但作为软件系统的分析者、设计者和开发者,我们必须为软件产品寻求一种合理的架构设计,因为它不仅能够使系统满足非功能性需求,而且能够降低开发成本和维护费用。


  总之,架构设计是软件开发过程的重要组成部分,它不是单纯的技术,也不具有一种特定的形式,更不是与客户需求无关的。良好的软件架构能够服务于整个开发过程,有效地降低项目风险,确保项目能够朝着健康的方向发展。因此,我们必须重视架构设计在软件开发中的重要作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/535364.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

必须要掌握的音视频编码、解码基础!

一、音视频为什么要编码? 音视频编码技术在音视频领域有着举足轻重的地位,这是由于音视频原始数据量较大,在传输的过程中如果不进行编码的话,则无法进行传输。比方说,一张普通的图片的大小大概是1-2M,假设我…

CH-90Na螯合树脂技术在废水除镍、除总铬、除重上的应用

电镀是利用电化学的方法对金属和非金属表面进行装饰、防护及获得某些新的性质的一种工艺过程。为保证电镀产品的质量,使金属镀层具有平整光滑的良好外观并与基体牢固结合,必须在镀前把镀件表面上的污物(油、锈、氧化皮等)彻底洗干…

美国Keysight是德科技34461A万用表

安捷伦Keysight是德科技34461A万用表 安捷伦万用表 附加功能: 带有内置条形图、直方图、趋势、数学和统计数据的彩色图形显示 I/O:USB、LAN/LXI、GPIB(可选) 已启用 BenchVue。从您的 PC 控制您的 DMM,以轻松查看和捕…

【沐风老师】3dMax粒子拖尾光效插件Ky_Trail使用教程

Ky_Trail粒子拖尾光效插件使用教程 【Ky_Trail 用户界面】 Ky_Trail粒子拖尾光效插件,可以模拟各种粒子拖尾效果动画。 【适用版本】 3dMax4 - 2021 【安装方法】 将插件文件“Ky_Trail.dlv”复制到3dMax插件目录中(3ds Max\plugins”)。 【使用方法】 1.插件安装完成后启…

github某0day漏洞投毒与钓鱼样本分析

前言 近日,烽火台实验室监测到多起针对安全人员的钓鱼攻击。其中一例利用MS Office Word 0DAY进行钓鱼,在github.com和Telegram群组中公开0DAY利用程序,其中并没有包含真正的利用程序,但是却捆绑了木马。运行后下载和执行木马程序…

git rebase问题:First, rewinding head to replay your work on top of it

分支上使用 git rebase 主干名 同步代码时提示&#xff1a; First, rewinding head to replay your work on top of it... 具体信息如截图&#xff1a; 用下面的命令可以解决&#xff1a; git fetch origin; git reset --hard origin/<branch>

UM2002 一款低功耗SUB-1G 无线接收机芯片

UM2002 是一款工作于 200MHz~960MHz 范围内的低功耗、高性能、单片集成的(G)FSK/OOK 无线接收机芯片。内部集成完整的射频接收机、频率综合器、解调器&#xff0c;只需配备简单、低成本的外 围器件就可以获得良好的接收性能。 芯片支持灵活可设的数据包格式&#xff0c;支持数据…

技术如何通过API接口获取自己想要同款商品的数据

一、随着电子商务的兴起&#xff0c;越来越多的人开始关注如何通过API接口获取自己想要同款的商品数据。本文将介绍如何利用API接口获取商品数据&#xff0c;以及一些必要的步骤和注意事项。 第一步&#xff1a;寻找适当的API接口 在开始获取商品数据之前&#xff0c;我们需要…

力扣 239. 滑动窗口最大值

题目来源&#xff1a;https://leetcode.cn/problems/sliding-window-maximum/ C题解&#xff1a;用暴力解法会超时。下面题解参照代码随想录 为了使队列窗口能快速找对最大值&#xff0c;自定义一个单调队列&#xff0c;队首为最大值&#xff0c;每次push进去的元素值都比队列…

FPGA纯verilog代码实现H264视频压缩 提供工程源码和技术支持

这里写目录标题 1、前言2、我这里已有的视频图像编解码方案3、H264视频压缩理论4、H264视频压缩-性能表现5、H264视频压缩-设计方案6、Vivado工程详解7、Vivado功能仿真8、福利&#xff1a;工程代码的获取 1、前言 H264视频压缩与解码在FPGA图传领域应用广泛&#xff0c;Xilin…

java+springboot基金股票信息系统的设计与实现

Spring Boot 是 Spring 家族中的一个全新的框架&#xff0c;它用来简化Spring应用程序的创建和开发过程。也可以说 Spring Boot 能简化我们之前采用SSM&#xff08;Spring MVC Spring MyBatis &#xff09;框架进行开发的过程。基于JAVA的基金分析系统包括后台管理和前端。前…

31从零开始学Java之详解如何定义方法

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 经过前面两篇关于面向对象、类和对象的文章&#xff0c;壹哥相信你现在对面向对象已经有了基本的了解…

微信小程序配置实现中英文国际化语言切换

目录 1,在根目录新建文件夹和js文件 2. 在main.js中设置全局语言状态&#xff08;默认设置为中文&#xff09; 3. 页面添加 语言切换按钮&#xff08;登录页面&#xff09; 4. 在需要显示的页面导入使用 1,在根目录新建文件夹和js文件 根目录新建一个locales.js文件, 通用…

苹果手机通话怎么录音?通话录音的详细教程!

案例&#xff1a;iPhone怎么一边通话一边录音&#xff1f; 【苹果手机通过普通的方式不能边通话边录音&#xff0c;有什么方法可以帮到我吗&#xff1f;感谢&#xff01;】 录制通话可以帮助用户记录重要的电话内容&#xff0c;如商务谈判、家庭事务等。但是录音涉及隐私&…

Java基础(41)Java输入/输出流

在Java中所有数据都是使用流读写的。流是一组有序的数据序列&#xff0c;将数据从一个地方带到另一个地方。根据数据流向的不同&#xff0c;可以分为输入&#xff08;Input&#xff09;流和输出&#xff08;Output&#xff09;流两种。 什么是输入/输出流 Java 程序通过流来完…

Unity3D :创建您的第一个运行时 UI

ygtu May 16, 2023 • 27 min read 推荐&#xff1a;将 NSDT场景编辑器 加入你的3D工具链 3D工具集&#xff1a; NSDT简石数字孪生 创建您的第一个运行时 UI 本页将指导您完成使用 UI 工具包设置简单字符选择屏幕的步骤。它涵盖了 UI 元素和模板的创建、场景设置以及如何将脚…

公网SSH远程连接Termux - 电脑使用安卓Termux【cpolar内网穿透】

文章目录 1.安装ssh2.安装cpolar内网穿透3.远程ssh连接配置4.公网远程连接5.固定远程连接地址 使用安卓机跑东西的时候&#xff0c;屏幕太小&#xff0c;有时候操作不习惯。不过我们可以开启ssh&#xff0c;使用电脑PC端SSH远程连接手机termux。 本次教程主要实现在安卓手机te…

如何提高PID控制器离散化精度(SCL+梯形图代码)

通常采样率(执行频率)1/Ts的典型取值为闭环带宽的5~10倍。实际上大部分工程采样率范围会使我们所期望的闭环性能下降,要忽略采样造成的影响,采样率至少是典型值的10倍。原则上,采样率1/Ts在允许的计算能力范围内越大越好。当采样率较低时,提高PID控制器离散化精度的一种方…

DSSR122 4899001-NK汽车电子电气架构进化的终点在哪里

​ DSSR122 4899001-NK汽车电子电气架构进化的终点在哪里 随着人们对汽车性能要求的不断提高&#xff0c;越来越多的汽车电子/电气&#xff08;E/E&#xff09;架构系统被集成到汽车中&#xff0c;成为智能交通、自动驾驶、智能城市等更广泛生态系统的组成部分。汽车行业自动化…

Spring Boot 集成 Redis

Spring Boot 集成 Redis 一 集成Jedis1.1 Jedis1.2 集成步骤1.2.1 建Module1.2.2 改POM1.2.3 写YML1.2.4 主启动1.2.5 业务类 二 集成lettuce2.1 lettuce2.2 lettuce Vs Jedis2.3 集成步骤2.3.1 改pom2.3.2 业务类 三 集成RedisTemplate3.1 单机集成3.1.1 POM3.1.2 YML配置3.1.…