描述软件架构与框架之间的区别与联系

  • 软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。架构模式(style)是特定领域常见问题的解决方案。
  • 框架是特定语言和技术的架构应用解决方案。
  • 区别:
    • 软件架构用相对抽象的概念来描述部件的功能、部件与部件之间的协作,从而大致地描述出系统完整的运作流程。它不是实际系统的一部分。
    • 而框架是具象的概念,是实际系统的一部分。框架使用特定的语言和技术描述了架构中各部件功能的具体实现。通过使用框架,让开发者聚焦于业务逻辑代码而不是技术实现。
    • 联系:
      • 软件架构指导了框架的设计,框架通过特定的语言和技术实现了软件架构。
      • 框架可能集合了一种或多种软件架构。

以你的项目为案例

  • 绘制三层架构模型图,细致到分区
  • 结合你程序的结构,从程序员角度说明三层架构给开发者带来的便利
    • 分离了关注点,各部分的开发者只需要关注自己负责模块的实现。
    • 层与层之间分离后,只要接口不发生变化,层内无论如何变化甚至是重构,其他层都不受影响,大大降低了耦合程度。

研究 VUE 与 Flux 状态管理的异同

  • VUE

    • vue使用vuex作为状态管理工具。vuex是Flux思想的实现之一,并在Flux的基础上做了改进。
    • vuex 包含有五个基本的对象:
      • state:存储状态。也就是变量;
      • getters:派生状态。也就是set、get中的get,有两个可选参数:state、getters分别可以获取state中的变量和其他的getters。外部调用方式:store.getters.personInfo()。
      • mutations:提交状态修改。也就是set、get中的set,这是vuex中唯一修改state的方式,但不支持异步操作。第一个参数默认是state。外部调用方式:store.commit('SET_AGE', 18)。
      • actions:和mutations类似。不过actions支持异步操作。第一个参数默认是和store具有相同参数属性的对象。外部调用方式:store.dispatch('nameAsyn')。
      • modules:store的子模块,内容就相当于是store的一个实例。调用方式和前面介绍的相似,只是要加上当前子模块名,如:store.a.getters.xxx()。
    • 个人理解:vuex通过state储存状态,获取状态应该使用getters。mutations是唯一直接修改状态的操作。actions是一系列逻辑操作,当actions需要修改状态时,它需要通过commit mutations来达到目的。而当系统比较复杂时,state对象就会变得庞大而复杂,这时候使用modules来对state进行模块划分。
    • Vuex的数据流:

      View调用store.commit提交对应的请求到Store中对应的mutation函数->store改变生成新的state(vue检测到数据变化自动渲染)

  • Flux
    • Flux是facebook创建,专门用来构建前端框架结构的框架。
    • Flux包含四个基本对象:
      • action: 与vuex类似。
      • dispatcher:dispatcher将action的操作分发到不同的store。
      • store:管理状态。当store状态更新时,发布一个change事件,通知view更新视图。
      • view:监听store发布的change事件,获取新数据并提供给它的子视图。
    • 实际上vuex是基于Flux的实现,框架基本相同,但vuex将dispatcher和store合并为单独的store,并用state记录不同时间点下store的状态,方便了对状态的管理。且由于Vue自动重新渲染的特性,无需订阅重新渲染函数,只要生成新的State即可。
    • Flux的数据流:

      View发起Action->Action传递到Dispatcher->Dispatcher将通知Store->Store的状态改变通知View进行改变

参考资料:
1.理解vuex -- vue的状态管理模式
2.Vue.js - 状态管理
3.关于Flux,Vuex,Redux的思考
4.react状态管理之flux

最新文章

  1. ***git自动化部署总结
  2. nginx 自动忽略request中header name包含下划线参数的解决方法
  3. 接微软技术(c#,.net,vb.net, asp.net, sql server, bi, dw etc)项目
  4. Java方法区和运行时常量池溢出问题分析
  5. catch that cow (bfs 搜索的实际应用,和图的邻接表的bfs遍历基本上一样)
  6. MVC4 经典增删改查详情demo
  7. java中的==和!=
  8. Umbraco中Document Type取名限制
  9. Boost.Asio基础(五) 异步编程初探
  10. aliyun硬盘挂载
  11. Java Spring MVC项目搭建(二)——项目配置
  12. 将Java Web项目部署到远程主机上
  13. Java之进程与线程
  14. javascript中new操作符
  15. 【深度学习系列】用PaddlePaddle和Tensorflow实现经典CNN网络Vgg
  16. linux下使用 FreeRDP 连接 Windows 远程桌面(转)
  17. Linux安装java环境教程
  18. codeforces 868A Bark to Unlock
  19. Django框架第一篇基础
  20. 补充的flask实例化参数以及信号

热门文章

  1. docker inspect命令查看镜像详细信息
  2. C#基础知识之理解Cookie和Session机制
  3. 通过telnet自动下载cfg配置文件
  4. 随机发送n位数字+字母的验证码
  5. CodeForces-1167C
  6. R中的常用命令(持续更新)
  7. 关于python pip安装第三方库 jieba 中文分词工具后提示"ImportError: cannot import name 'Random'"报错问题
  8. Python学习:Python设计模式-单例模式
  9. 上传200G文件
  10. js怎么上传文件夹