架构、框架、组件、插件浅谈理解
平常总会看到说某某架构、某某框架,但是对于其意了解总有些迷糊,以至于有时候会出笑话,看了几位老哥的博客,有了一些理解,在此记录,加深一下。
参考链接:
https://blog.csdn.net/zhouziyu2011/article/details/68060055
https://blog.csdn.net/CillyB/article/details/79464339
架构:
软件架构,也成称为软件体系结构,简单地说就是一种设计方案,将用户的不同需求抽象成组件,且能够描述组件之间的通信和调用。软件架构会分析工程中的问题,针对问题设计解决方案,针对解决方案分析应具有的功能,针对功能设计软件系统的层次和模块及层次模块之间的逻辑交互关系,确定各个功能如何由这些逻辑实现。开发人员可以根据软件架构分析出来的层次和架构进行软件编写。
另外百度百科如下:
是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。 软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。
理解:
架构更趋于方案,是设计,并不是具体的技术。software architecture
另外关于MVC到底是什么的问题:
https://blog.csdn.net/whalefrat/article/details/78442175
https://www.zhihu.com/question/31079945
https://blog.csdn.net/CillyB/article/details/79464339
关于mvc有人说是设计模式,有人说是框架模式,有人说是架构模式。
个人觉得都可,只不过如果硬说是设计模块感觉有些牵强,框架模式和架构模式都可,关键字在模式二字。
既然是模式,那么是思想、是设计、是规范而不在于代码层面。
框架:
软件框架,是软件开发过程中提取软件的共性部分形成的体系结构。框架不是现成可用的应用系统,而是一个半成品,是一个提供了诸多服务,供开发人员进行二次开发,实现具体功能的程序实体。
理解:
更趋于技术,是半成品,需要进行二次开放。比如spring 框架- framework
关于框架与设计模式:
下面这一段觉得挺直观,可以看看。
有很多程序员往往把框架模式和设计模式混淆,认为MVC是一种设计模式。实际上它们完全是不同的概念。[7]
框架、设计模式这两个概念总容易被混淆,其实它们之间还是有区别的。框架通常是代码重用,而设计模式是设计重用,架构则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。在软件生产中有三种级别的重用:内部重用,即在同一应用中能公共使用的抽象块;代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;应用框架的重用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的重用性。
框架与设计模式虽然相似,但却有着根本的不同。设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示;设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。可以说,框架是软件,而设计模式是软件的知识。
框架模式有哪些?
MVC、MTV、MVP、CBD、ORM等等;
框架有哪些?
C++语言的QT、MFC、gtk,Java语言的SSH 、SSI,php语言的 smarty(MVC模式),python语言的django(MTV模式)等等
设计模式有哪些?
工厂模式、适配器模式、策略模式等等
简而言之:框架是大智慧,用来对软件设计进行分工;设计模式是小技巧,对具体问题提出解决方案,以提高代码复用率,降低耦合度。
3、模式:
设计模式强调的是一个设计问题的解决方法,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
框架与设计模式的关系:设计模式研究的是对单一问题的设计思路和解决方法,一个模式可应用于不同的框架和被不同的程序语言所实现;而框架则是一个应用的体系结构,是一种或多种设计模式和代码的混合体。设计模式的思想可以在框架设计中进行应用。
架构与设计模式的关系:设计模式研究的是对单一问题的设计思路和解决方法,范畴比较小;而架构是高层次的针对体系结构的一种设计思路,范畴比较大。一个架构中可能会出现多个设计模式的思想。
4、模块:
根据不同的标准,通常会说程序模块或功能模块,程序模块指的是一段能够实现某个目标的成员代码段,功能模块则用来说明一个功能所包含的系统行为。定义模块的原则是:高内聚和低耦合。
5、组件:
组件是封装了一个或多个程序模块的实体。组件强调的是封装,利用接口进行交互。插件是组件的一个子类,就是将组件中具有某些特点的组件归为插件。
理解:组件是封装,是可重用的代码。
6、插件:
插件属于组件,插件是组件的一个子类,就是将组件中具有某些特点的组件归为插件。插件是一种电脑程序,通过和应用程序的互动,来为应用程序增加一些特定的功能,仅靠插件是无法正常运行的,需要依赖于应用程序才能发挥自身功能。插件和应用程序之间通过接口进行交互。
理解:即插即用,动态。关于插件有的说是可单独运行的,有的说必须依赖其他应用。个人趋于后者,如果是可单独运行的,我感觉理解为子系统更好,打个比方:比如微信的朋友圈如果能单独运行,感觉理解为子系统或者子应用更好理解。