软件架构, 软件框架,设计模式的区别_比较架构模式,设计模式,惯用法的区别和联系-程序员宅基地

技术标签: 前端  服务器  设计模式  

已剪辑自: https://segmentfault.com/a/1190000022489060

软件架构

软件的架构是系统的一个草图、阐述了各个组件之间的通讯、划分层次、一旦系统开始详细设计、架构蓝图就很难甚至无法更改、是由软件架构师从无到有设计出来的。
比如说,多台机器负载均衡,用户访问多个不同业务的前端项目,前端项目通过HTTP接口访问服务器前端项目,服务器前端项目通过接口访问服务器后端项目,服务器后端项目访问并操作数据库的数据。

架构有广义和狭义的两种解释,广义上是指web服务的整体架构,即业务层,缓存层,Db层,异步任务层等等的负载和互相通信的机制。狭义上,也指细化到代码上的一些设计,使代码具有低耦合、高内聚、各司其职、易更换、修改、可以分散部署、编码构建的性质。

软件框架

软件框架:是在一定领域内、别人已经对这个领域制作软件所需的基础架构功能、进行了总结、做出了有代码实体的软件框架结构、如果要制作这一领域的软件、可以在别人写好的框架上、继续设计、编写自己的软件、骨头架上填肉、框架有一定的局限性。
例:MVC(框架)
英文 Model View Controller、是针对Web开发、已经写好有代码的框架、分别为M 模型(model)-V视图(view)-C控制器(controller)三部分
目的:模型和视图分离开、使得一个模型可被多个视图使用、简单说就是同样的一个网站、用手机的视图(界面)和电脑的视图、可以共用一个模型。

设计模式

对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案、是一种解决方案的思想、不拘泥于代码、通常以类型或对象来描述其中的关系和相互作用、依赖与抽象、来达到解耦和、可宽展、易维护等、设计模式是用来解决问题的。特征是,落脚点一定是代码本身。

三者的区别

软件架构是指软件架构师在软件服务上,对复杂的软件整体规划的一种蓝图、一般是分层、画出各个组件的关系。
软件框架是指在特定的领域内、已经有人写好的框架(有代码)、框架有局限性、只限特定领域。
设计模式是指针对一些编程实际的问题所提出的抽象解决方案、用类与类之间的关系相互作用、达到目的。


架构、框架、设计模式的定义和区别

已剪辑自: https://www.cnblogs.com/lsm-boke/p/12657791.html

一、架构

**架构即软件架构,**是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。软件体系结构是构建计算机软件实践的基础,简单来说,软件架构是一个系统的草图,是一种设计方案,将客户的不同需求抽象成为抽象组件,各个组件之间的连接则明确和相对细致地描述组件之间的通讯。

在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。在面向对象领域中,组件之间的连接通常用接口来实现。

二、框架

**框架即软件框架,**通常指的是为了实现某个业界标准或完成特定基本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的软件产品。

框架的功能类似于基础设施,与具体的软件应用无关,是项目软件开发过程中提取特定领域软件的共性部分形成的体系结构,提供并实现最为基础的软件架构和体系。软件开发者通常依据特定的框架实现更为复杂的商业运用和业务逻辑。这样的软件应用可以在支持同一种框架的软件系统中运行。

简而言之,框架就是制定一套规范或者规则(思想),大家(程序员)在该规范或者规则(思想)下工作,不同领域的软件项目有着不同的框架类型。框架不是现成可用的应用系统。而是一个半成品,提供了诸多服务,开发人员进行二次开发,实现具体功能的应用系统。

三、设计模式

设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案,设计模式特指软件“设计”层次上的问题。

设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。它是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,它强调的是一个设计问题的解决方法。

面向对象设计模式通常以类别或对象来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类别或对象。设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力。


软件架构 :一般场景下拥有设计的选择权

设计模式 :选择后特定场景下的最佳实践


这么说吧

没有架构,楼很难搭起来,或者很容易塌

但没有设计模式,没有大事,顶多工人难受些

良好的架构对产品系统很有用

良好的模式对码农很有用


面向对象不同而不同。

——————进阶——————

面对客户哔哔时,我们用需求分析架构。

面对整个软件或系统时,我们谈论架构分析。

面对软件模块设计时,我们使用设计模式。用实际项目去理解:

你从事任何一个比较大型的项目,这个项目一定有它通用或独特的架构。

这里面可能包含了诺干设计模式。

总之你光会设计模式,还是搞不定软件架构的,软件架构可不像设计模式那样能编出书,统一成23种基本的设计模式。软件架构是依赖于具体软件具体领域的特性的。

面对模块实现时,我们应用特定编程语言的特性。

——————进阶——————

如果你能根据需求用编程语言倒逼一步步上去,实现语言的高效与功能的拓展。

——————进阶——————

如果你能根据需求直接倒逼到需要选择特定特点的特定语言,就可以称的上集大成者了,因为你能体察到每个层级的现有设计限制。

——————进阶——————

学会妥协,trade off.


用实际项目去理解:

你从事任何一个比较大型的项目,这个项目一定有它通用或独特的架构。

这里面可能包含了诺干设计模式。

总之你光会设计模式,还是搞不定软件架构的,软件架构可不像设计模式那样能编出书,统一成23种基本的设计模式。软件架构是依赖于具体软件具体领域的特性的。


设计模式是从coding层面提炼出来的一种总结,用来使得代码的耦合度达到最大限度的分离,从而可以使你的代码更好的被复用,更容易被替换,更好的拥抱需求的变化。

架构则是着眼于更全局的高度,包括硬件,操作系统,网络环境,包括从立项到维护之间的所有过程(需求,设计,编码,部署,维护,功能迭代等)。架构的责任是保证软件的可用性,可扩展性,可伸缩性,安全等等一系列的指标。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41854911/article/details/127345519

智能推荐

旋转的检测框 | 校准的深度特征用于目标检测(附实现源码)-程序员宅基地

文章浏览阅读632次。计算机视觉研究院专栏作者:Edison_G在过去的十年里,在目标检测方面取得了重大进展,这些目标通常以大规模变化和任意方向分布。然而,现有的大多数方法依赖于具有不同尺度、角度和长宽比的启发..._旋转框目标检测

DevExpress WinForm 选择年份控件之利用DateEdit 仅显示和选择年份控件设置_dateeditcriteriacontrol控件可以选到时间-程序员宅基地

文章浏览阅读1.7w次。DevExpress只提供了选择月份的控件MonthEdit,并没提供选择选择年份的控件,目测是官方偷懒不想弄,因为要实现的方法也很简单,利用ComboBoxEdit添加年份数据即可,直接封装一个控件轻松搞定的事。当然想偷懒的话,就用DateEdit这个控件稍微设置几个属性也可以做到选择年份的效果设置代码如下:void ToYearStyle(DevExpress.Xtr..._dateeditcriteriacontrol控件可以选到时间

CS:APP二进制炸弹phase5_movzbl (%rbx,%rax,1),%ecx-程序员宅基地

文章浏览阅读6.2k次,点赞7次,收藏18次。CS:APP二进制炸弹phase5_movzbl (%rbx,%rax,1),%ecx

仿照jq的模式封装自己的一个路由东西_aplanmis-mall-程序员宅基地

文章浏览阅读114次。废话不多说,直接代码/*! * router JavaScript Library v1.1.0 for web * http://39.107.139.174:8084 * author huangjunfu * /aplanmis-project/aplanmis-mall/src/main/resources/static/mall/js/utils * * Date: 2019-07-12 T15:04 * update:2019-12-17 T14:48 * describe_aplanmis-mall

云运维-初级1段-Tomcat搭建配置-程序员宅基地

文章浏览阅读214次。Tomcat搭建配置任务1 Tomcat介绍1.简介Tomcat是Apache软件基金会( Apache Software Foundation )的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。受Java爱好者的喜爱,并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器。Tomcat服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。目前

NIOS开发积累_iord-程序员宅基地

文章浏览阅读389次。1、IORD/IOWR读写函数原型:IORD (BASE, REGNUM) 输入参数:BASE为寄存器的基地址,REGNUM为寄存器的偏移量 函数说明:从基地址为BASE的设备中读取寄存器中偏移量为REGNUM的单元里面的值。寄存器的值在地址总线的范围之内。 返回值: 有 函数原型:IOWR (BASE, REGNUM, DATA) 输入参数:BASE为寄存器的基地址,REGNUM..._iord

随便推点

论坛里输入带行号可复制的规范代码_粘贴带行号代码格式-程序员宅基地

文章浏览阅读944次。怎么在写帖子的时候怎么写规范的、带行号,可以复制的代码呢?做为一个小白,在论坛里混,连论坛都不知道怎么用是一件非常痛苦的事,特别是在想问问题的时候,代码写的不清晰让别人看都看不清的时候。搜索了好多答案,都是以前版本的解决方式,自己摸索了下给出下面的解决方法。1.这是我之前直接粘贴在编辑栏里发出去的代码的样子。 2.改了之后3.点击<>这个图标4.选..._粘贴带行号代码格式

Unity Shader 反射 折射 菲涅尔反射_unity 折射-程序员宅基地

文章浏览阅读2k次。反射核心算法:Reflect(-viewDir,worldNormalDir)折射核心算法:Refact(-viewDir,worldNormalDir)菲涅尔反射算法:Fresnel =FresnelInstenisty+(1-fresnelIntensity)*dot(-viewDir,worldNormalDir)_unity 折射

【苹果共享推送相册推】使用PushMebaby推送在organizer中点击archive举行distribute,公布的过程中细致筛选save for enterprise distribution_苹果推,相册推,日历推’怎么实现-程序员宅基地

文章浏览阅读182次。推荐内容IMESSGAE相关作者推荐内容 iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容 1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容 2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容 3.日历推 *** 点击即可查看作者要求内容信息作者推荐内容 4.虚拟机安装简单 *** 点击即可查看作者要求内容信息作者推荐内容 5.iMessage *** 点击即可查看作者要求_苹果推,相册推,日历推’怎么实现

三、WEB安全 03——JavaScript基础_javascript与web安全-程序员宅基地

文章浏览阅读1.7k次。三、WEB安全 03——JavaScript 基础1、JavaScript基础 01——js的引入方式、语句、注释、变量、保留关键字、作用域、数据类型(1)概述​ JavaScript是目前web开发中不可缺少的脚本语言,js不需要编译即可运行,运行在客户端,需要通过浏览器来解析执行JavaScript代码。​ 诞生于1995年,当时的主要目的是验证表单的数据是否合法。​ JavaScript本来应该叫Livescript,但是在发布前夕,想搭上当时超热的java顺风车,临时把名字改为了JavaS_javascript与web安全

MSMQ 3.0_msmq3.0 dll-程序员宅基地

文章浏览阅读2.3k次。xp 和 .NET 中的msmq 已经升级为 3.0我测试了一下,有几个很好的特性不错。1. HTTP /HTTPS 支持。这个类似 biztalk 中的http接受通道一样,对 IIS 作了一个扩展。这样可以忽略firewall 的影响2. DistrubutionList/ Multi-formater name , MSMQ 可以群发,类似mail 的alis 列表一样,还可以有事务的支持。_msmq3.0 dll

已解决WARNING: Ignoring invalid distribution -addlepaddle (d:softpython36libsite-packages)_warning: ignoring invalid distribution -rotobuf-程序员宅基地

文章浏览阅读7.7k次,点赞4次,收藏8次。已解决(pip安装模块报错)WARNING: Ignoring invalid distribution -addlepaddle (d:\soft\python36\lib\site-packages)_warning: ignoring invalid distribution -rotobuf