软件项目架构简单总结
软件架构
软件架构是什么?
软件架构是推理系统所需的一组结构。这些结构包括软件元素,它们之间的关系以及两者的属性。
其他定义
- 软件架构包括有关软件系统组织的一组重要决策。
- 包含的决策
- 包括选择组成系统的结构元素及其接口
- 这些元素之间的协作中指定的行为
- 将这些结构和行为元素组成更大的子系统
- 以及指导该组织的体系结构风格
- 还涉及功能、可用性、弹性、性能、重用、可理解性、经济和技术限制、权衡和美学等方面的考量。
目标
- 架构是设计蓝图,是对结构和组件的描述,可以让大家快速理解整个体系,指导一系列的细节设计。
- 架构的本质,是利用分、合、打散、重组等技术手段,对系统进行有序化重构。
软件架构有什么好处
更高的生产效率
结构确定了,那就容易向已有的软件添加新特性,每一处新代码都能事先知道添加的位置
更好的代码可维护性
代码结构可见和已知,那就容易维护已有的软件,也更容易找到Bug和异常
更高的适应性
代码结构事先考虑到分层,那就容易完成诸如换一个前端,添加业务规则引擎等新特性。
宣扬不可知论
软件架构能使你根据你当前的结构看到行业里大肆宣扬和时髦的东西,去适应这些大肆宣扬和时髦的东西
常见的软件架构维度
业务架构
描述我们要做一些什么样的事情,对应的业务流程和模式是怎样的。
应用架构
描述我们提供哪些功能以及如何去实现这些功能,可拆分为产品架构和技术架构
技术架构
描述我们的技术实现方案,例如微服务间的关系,中间件的使用,组件的设计等。
数据架构
描述我们的数据逻辑模型,物理模型等。
常见的软件架构
Client/Server Architecture(客户端/服务器架构模式)
由两部分组成的软件架构模型,通过计算机网络(或在同一台计算机上)相互通讯的客户端系统和服务端系统。
Component-Based Architecture(基于组件的架构模式)
基于组件的架构关注于设计的分解,即设计成单独的功能性或逻辑性组件来表示定义明确、包含方法、事件与属性的通信接口
基于组件的架构的首要目标是确保组件的复用性
Layered Architecture(分层架构)
分层架构专注于将应用程序中的相关功能组合到不同的层级中,层级间呈现出垂直层叠的结构
每一层中的功能都通过共同的角色或职责来关联。层级间的通信是清晰的,而且是松耦合的。
将你的应用程序分出层级来非常有有助于对关注点分离策略的支持,从而提高了灵活性和可维护性。
N-Tier/3-Tier Architecture (N层/3层架构)、
N层/3层架构描述是将功能大致像分层风格的架构那样分割成几段,而让每一段都成为可以放到一个物理上分离的计算机上的层。
它们是通过面向组件的方式被发展而来的,一般通信是用的特定于平台的方法,而不是基于消息的方式。
Object-Oriented Architecture(面向对象的架构)
面向对象的架构是一种基于责任分解的设计模式,即将系统分解为独立可复用的对象,每个对象包含了与自身相关的数据与行为
面向对象设计将系统看作一系列相互协作的的对象,而不是一组程序或处理指令
对象间互相分离、独立且耦合松散,它们通过接口调用或处理其他对象内的属性,并通过消息的发送与接收在接口上进行通信。
软件架构演变
单体结构
Web应用发展的早期,大部分Web工程师将所有的功能模块打包到一起并放在一个Web容器中运行,所有功能模块使用同一个数据库
垂直架构
将一个单体系统按业务垂直拆分为若干系统,系统之间通过网络交互来完成用户的业务处理,每个系统可分布式部署,这种架构统称为分布式架构
面向服务的架构
基于分布式架构,它将不同业务功能按服务进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。
微服务架构
基于SOA架构的思想,对服务层进行细粒度的拆分,所拆分的每个服务只完成某个特定的业务功能,比如订单服务只实现订单相关的业务。
软件项目架构简单总结相关推荐
- c语言做bs架构_《Java软件项目(BS架构)开发》基本概念.ppt
<Java软件项目(BS架构)开发>基本概念 第1章 基本概念 学习目标 课程介绍 B/S架构应用程序的相关概念介绍 课程介绍 必修课,学分4, 6学时/周 围绕联合银行的网上银行项目的实 ...
- Java-GUI编程实战之管理系统 Day1【项目开发流程、软件三层架构、项目需求、项目结构分析】
视频.课件.源码[链接:https://pan.baidu.com/s/13ffqGDzH-DZib6-MFViW3Q 提取码:zjxs] Java-GUI编程实战之管理系统 Day1[项目开发流程. ...
- react antd confirm content list_react简单的项目架构搭建过程
前言 react官方推荐的脚手架create-react-app因为想给用户的最大自由度所以并没有像vue的脚手架那样生成的项目架构那么齐全,用这个写写demo还行,但是真正用在项目上还是不太合适的. ...
- Go后台项目架构思考与重构 | 深度长文
作者 | 腾讯云后台工程师黄雷 编辑 | 唐小引 来源 | CSDN(ID:CSDNnews) 引言 本文首先介绍了架构的重要性,随后从一个实际项目的重构过程作为主线,逐步引出主流的架构设计思想以及其 ...
- 软件项目随着数据量的不断增加,有什么优化方案么?
作者 l 会点代码的大叔(CodeDaShu) 随着软件项目中的数据量不断增加,有哪些方法可以让我们的系统依然运行的非常的流畅,响应时间很短呢?让我们看一下: 01 单体架构 下面这个架构,大家一定很 ...
- 去年一个百万级的小软件项目经验分享,20来个功能模块,项目不太好做有些棘手...
别人总觉得是在显吧,干脆把这个项目认为是小项目了,不知道把这个项目是小了,别人会不会又觉得又显吧了?说大也不行.说小也不行,也的确没招了. 我想主要把项目里遇到的问题分享给大家一起探讨,也并不是为了什 ...
- 2周修改了1000多个Bug后软件项目扭转了局面,未交付银行的现金管理系统健壮起来了...
为什么80%的码农都做不了架构师?>>> 一方面是项目的工期紧急.另一方面也难做到公司招聘的程序员个个都是精英程序员,其次客户的需求变化.商业逻辑经常性的变更也导致系统的不稳定 ...
- 三层架构项目如何发布_以k8s集群管理为例,大牛教你如何设计优秀项目架构
架构设计一直是技术人的关注热点,如何设计一个更优的架构对于实际的业务来说至关重要.本文腾讯云专家将从自身从事的一个k8s集群管理项目为例,重点剖析在项目开发过程中的三次架构演进历程,即针对项目最早版本 ...
- 天翼云从业认证(1.8)了解软件开发的环境、软件基础架构和常用软件开发工具
常用开发环境 软件是一系列按照特定顺序组织的计算机数据和指令的集合. 软件特点 软件开发流程:调研沟通/获取需求.需求分析.产品设计.界面设计.设计原型图.程序编码.测试.打包发布.产品上线 软件开发 ...
- 基于.net平台remoting、DB2技术的大型分布式HIS系统架构及开发(项目架构师方向)...
课程链接:http://***/goods.php?id=131 培训定位: 适合于.net方向有一定的工作经验提高用.本次课程涉及到系统架构.DB2.抽象工厂.组件式编程.基于角色和个人的混合授权思 ...
最新文章
- 快速完整的基于点云闭环检测的激光SLAM系统
- 手机文件share.php,华为P10手机Huawei Share怎么用?一秒共享手机文件
- 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
- c语言 offsetof函数,C 库宏 - offsetof()函数
- 多种语言《九九乘法表》荟萃:C、C++、C#、JavaScript、SQL、VB、VBA、Python
- linux用户组登录,linux用户和用户组
- leetcode —— 15. 三数之和
- 正则表达式 匹配标签里面的值 eg:image input
- mysql s索引 树_mysql 学习 - B+树索引
- aliplayer播放rtmp视频流
- 搜狗高速浏览器主页被篡改怎么办 搜狗浏览器中恢复被篡改主页的方法
- mysql改为sql_sql - 将MySQL列更改为AUTO_INCREMENT
- JVM垃圾回收说为学日益,为道日损
- this关键字、this关键字应用
- 学生查分系统该怎么制作?
- 学生学籍管理系统包括成绩c语言,学籍管理系统设计C语言代码
- Gradle 的下载安装教程
- 阿里云共享和独享云虚拟主机该怎么选?
- 给android手机划代
- 利用声网进行屏幕共享及关闭共享网络状态检测
热门文章
- Android 调用免费短信验证码sdk开发
- win10系统服务器管理器,win10服务管理器,详细教您Win10服务管理器怎样打开
- form表单提交中,确定和取消效果的实现
- 从零搭建 ES 搜索服务(五)搜索结果高亮
- 计算机默认网络密码是多少,中国电信的默认服务密码是什么
- GenBank数据格式
- 数据归一化和标准化的区别
- 2019ug最新版本是多少_重磅!UGNX将在2019年发布最新版本!也将是最后一个版本!新功能令人意想不到!...
- 基于VS + Qt编程的UG/NX二次开发
- node-sass 安装失败,原因总结