已剪辑自: 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层面提炼出来的一种总结,用来使得代码的耦合度达到最大限度的分离,从而可以使你的代码更好的被复用,更容易被替换,更好的拥抱需求的变化。
架构则是着眼于更全局的高度,包括硬件,操作系统,网络环境,包括从立项到维护之间的所有过程(需求,设计,编码,部署,维护,功能迭代等)。架构的责任是保证软件的可用性,可扩展性,可伸缩性,安全等等一系列的指标。