描述软件架构与框架之间的区别与联系
- 软件架构
- 是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计,是一个系统的草图,描述的对象是直接构成系统的抽象组件。各个组件之间的连接明确细致的描述组件之间的通讯。
- 在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或对象,在面向对象领域当中,组件之间的连接通常用接口来实现。
- 软件框架
- 是面向领域(如ERP、计算领域等)的、可复用的“半成品”软件,它实现了该领域的共性部分,并提供了一些定义良好的可变点以保证灵活性和可扩展性。也就是说软件框架是领域分析结果的软件化,是领域内最终应用的模板。
- 软件框架至少包含以下组成部分:
- 一系列完成计算的模块,在此称为构件。
- 构件之间的关系与交互机制。
- 一系列可变点(也称热点,Hot-spots,或调整点)。
- 可变点的行为调整机制。
- 区别
- 框架是具体语言和技术相关的,而架构与具体语言和技术无关。
- 框架是软件,架构不是软件。
- 软件架构不是软件,而是关于软件如何设计的重要决策。软件架构决策涉及到如何将软件系统分解成不同的部分、各部分之间的静态结构关系和动态交互关系等。经过完整的开发过程之后,这些架构决策将体现在最终开发出的软件系统中;当然,引入软件框架之后,整个开发过程变成了“分两步走”,而架构决策往往会体现在框架之中。
- 框架是一种特殊的软件,由实际的代码构建而成,它并不能提供完整无缺的解决方案,而是为你构建解决方案提供良好的基础,是软件系统、子系统的半成品。软件框架为具体的解决方案提供了基础,提供了基础服务和可扩展点,同时软件框架也建立了一些约束,开发人员在此基础上进行特定业务功能的定制开发。
- 联系
- 架构、框架是一种从大到小的关系,也是一种组合关系。
- 一个架构很可能应用了多个框架
以你的项目为案例
- 绘制三层架构模型图,细致到分区
- 结合你程序的结构,从程序员角度说明三层架构给开发者带来的便利
- 开发人员可以只关注整个结构中的其中某一层
- 可以很容易的用新的实现来替换原有层次的实现
- 可以降低层与层之间的依赖
- 有利于标准化
- 利于各层逻辑的复用
- 扩展性强。不同层负责不同的层面,如PetShop可经过简单的配置实现Sqlserver和oracle之间的转换,也可以实现B/S与C/S之间的转换
- 安全性高。用户端只能通过逻辑层来访问数据层,减少了入口点,把很多危险的系统功能都屏蔽了
- 项目结构更清楚,分工更明确,有利于后期的维护和升级
研究 VUE 与 Flux 状态管理的异同
- VUE状态管理
- Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化
- Flux状态管理
- Flux是由Facebook提出的,专门用来构建前端框架结构的框架,便于维护,用于安全考虑,它基于一个简单的原则:数据在应用中单向流动
- 同
VUE 和 Flux 的状态管理都是基于 Flux 思想的有效实现,通过对数据流进行严格管理来规范数据在 Web 应用中流动方式的框架。 - 异
对数据流的管理方式不同
- Flux 试图通过强制单向数据流来解决这个复杂度。在这种架构当中,Views 查询 Stores(而不是 Models),并且用户交互将会触发 Actions,Actions 则会被提交到一个集中的 Dispatcher 当中。当 Actions 被派发之后,Stores 将会随之更新自己并且通知 Views 进行修改。这些 Store 当中的修改会进一步促使 Views 查询新的数据
- VUE 的状态管理由vuex实现。VUE 没有使用 Dispatcher 来接收 Actions 、执行回调函数并通知 Store 改变状态,而是通过使用 Mutation 来改变状态。与 flux 对比,最大的区别是Vuex把action细分成了action和mutation,分别应对异步场景和同步场景,由store自身充当dispatcher(负责注册/分发action/(mutation))。即如果把 action 和 mutation 看作一层(Flux里的action),二者结构完全一致。