系统分析与设计个人作业lesson13
2015级计应
15331151
李佳
一、描述软件架构与框架之间的区别与联系
1.软件框架
软件框架是面向领域(如ERP、计算领域等)的、可复用的“半成品”软件,它实现了该领域的共性部分,并提供了一些定义良好的可变点以保证灵活性和可扩展性。也就是说软件框架是领域分析结果的软件化,是领域内最终应用的模板。随着软件规模的扩大、应用广泛和软件复用技术的发展,以子程序和类为单位的软件复用出现了很多的不足之处:
(1)子程序的库越来越庞大以至于其使用人员难以掌握
(2)大多数类的粒度很小,其自身不能完成所有有用的功能
正是因为这些原因,使得人们在复用中将一组类(模块)作为一个整体来考虑,由此出现了软件框架。而软件框架中至少包含以下组成部分:
(1)一系列完成计算的模块,成为构件
(2)构件之间的关系及交互机制
(3)一系列可变点(热点、或者称为调整点)
(4)可变点的行为调整机制
开发人员通过软件框架行为调整机制,将领域中具体应用中所特有的软件模块绑定到该软件框架的可变点上,从而得到了最终的应用系统,这个过程称为软件软件框架的例化,软件框架的存在使得开发人员将主要的精力放在系统所特有的模块的开发上,从而提高软件的生产率和质量。
软件框架的行为调整机制是指如何针对具体的应用调整该框架的可变部分、如何在可变点加入特定应用模块所采用的方法和规则。
2.软件架构
软件架构是一个系统的草图。软件架构描述的对象是直接构成系统的抽象组件。各个组件之间的连接则明确和相对细致地描述组件之间的通讯。软件架构在定义上分为’组成派’和’决策派’两大阵营,分别描述如下:
(1)’组成派’认为软件架构是将系统描述成计算组件及组件之间的交互。它有两个非常明显的特点:
- 关注架构实践的客体——软件,以软件本身作为描述对象。
- 分析了软件的组成,说明软件不是一个‘原子’意义上的整体,而是有不同的部分经过特定的接口进行连接组成的一个整体,这对软件开发来说很重要。
(2)’决策派’认为软件架构包含了一系列的决策,主要包括:
- 软件系统的组织
- 选择组成系统的结构元素和它们之间的接口,以及当这些元素相互协作时所体现的行为
- 如何组合这些元素,使它们逐渐合成为更大的子系统
- 用于指导这个系统组织的架构风格:这些元素以及它们的接口、协作和组合
软件架构并不仅仅关注软件本身的结构和行为,还注重其他特性:使用、功能性、性能、弹性、重用、可理解、经济以及技术的限制和权衡等。
简而言之,框架和架构的关系可以总结为两句话:(1)为了尽早验证架构设计,或者处于支持产品线开发的目的,可以将关键的通用机制甚至整个架构以框架的方式进行实现;(2)业界(及公司内部)可能存在大量可供重用的框架,这些框架或者已经实现了软件架构所需的重要架构机制,或者为未来系统的某个子系统提供了可扩展的半成品,所以最终的软件架构可以借助这些框架构造。
二、以你的项目为案例
- 绘制三层架构模型图,细致到分区。
这是我们的项目文件结构图:
- 结合你程序的结构,从程序员角度说明三层架构给开发者带来的便利。
1、开发人员可以只关注整个结构中的其中某一层;
2、可以很容易的用新的实现来替换原有层次的实现;
3、可以降低层与层之间的依赖;
4、有利于标准化;
5、利于各层逻辑的复用。
6、结构更加的明确
7、在后期维护的时候,极大地降低了维护成本和维护时间
三、研究 VUE 与 Flux 状态管理的异同
(1)Flux 是一种架构思想,专门解决软件的结构问题。它跟MVC 架构是同一类东西,但是更加简单和清晰。
Flux将一个应用分成四个部分。
View: 视图层
Action(动作):视图层发出的消息(比如mouseClick)
Dispatcher(派发器):用来接收Actions、执行回调函数
Store(数据层):用来存放应用的状态,一旦发生变动,就提醒Views要更新页面
Flux 的最大特点,就是数据的”单向流动”。
1.用户访问 View
2.View 发出用户的 Action
3.Dispatcher 收到 Action,要求 Store 进行相应的更新
4.Store 更新后,发出一个"change"事件
5.View 收到"change"事件后,更新页面
上面过程中,数据总是”单向流动”,任何相邻的部分都不会发生数据的”双向流动”。这保证了流程的清晰。
(2)说到 Vue 中的状态管理就不得不提到 Vuex,关于vuex
1)vuex是专门为vue提供的状态管理工具
2) 便于维护,保证安全,vue中引入vuex,解决状态之间共享的问题
3)多个组件调用一个状态,将原来组建与组件之间的状态传递改成组件与仓库之间的传递
4)vuex适用于构建大型的项目,如果不是大型项目,使用vuex会使代码更加繁琐
vuex核心:
state:存放多个组件共享的状态(数据)
mutations:存放更改state里状态的方法,用于变更状态,是唯一一个更改状态的属性
getters:将state中某个状态进行过滤,然后获取新的状态,类似于vue中的computed
actions:用于调用事件动作,并传递给mutation
modules:主要用来拆分state
Vuex 中没有 reducer 来生成全新的 state 来替换旧的 state,Vuex 中的 state 是可以被修改的。这么做的原因和 Vue 的运行机制有关系,Vue 基于 ES5 中的 getter/setter 来实现视图和数据的双向绑定,因此 Vuex 中 state 的变更可以通过 setter 通知到视图中对应的指令来实现视图更新。
Vuex 其实是一个针对 Vue 特化的 Flux,主要是为了配合 Vue 本身的响应式机制。当然吸取了一些 Redux 的特点,比如单状态树和便于测试和热重载的 API,但是也选择性的放弃了一些在 Vue 的场景下并不契合的特性,比如强制immutability(在保证了每一次状态变化都能追踪的情况下强制的immutability 带来的收益就很有限了)、为了同构而设计得较为繁琐的 API、必须依赖第三方库才能相对高效率地获得状态树的局部状态等等(相比之下 Vuex 直接用 Vue 本身的计算属性就可以)所以 Vue + Vuex 会更简洁,也不需要考虑性能问题,代价就是 Vuex 只能和 Vue 配合。