本文不详细介绍什么是整洁架构以及 MVP 模式,自行查看文章结尾相关链接文章。

整洁架构粗略介绍

下图为整洁架构最原始的结构图:

  1. Entities/Models:实体层,官方说法就是封装了企业里最通用的一部分逻辑,也可以叫 Models, 可能是只包含数据字段的对象,也可能包含方法,具有一部分业务逻辑。更加深入就是领域驱动(DDD)开发相关的内容。
  2. Use Case/Service:包含核心业务逻辑。
  3. Interface Adapter:适配层/胶水层,负责内圈的 entity 和 use case 同外圈的 external interfaces 之间的数据转化。需要把外层服务的数据转化成内层 entity 和 usecase 可以消费的数据,反之亦然。
  4. External Interfaces:依赖的外部服务,第三方框架,以及需要糊的页面 UI 都归属在这一层,这一层完全不感知内圈的任何逻辑,所以无论这一层怎么变( 组件库由 Element UI 改为 Ant Design Vue ,数据库由 MySQL 改为 PostgreSQL ),都不应该影响到内圈。

这不就是后端的 mvc 吗?

好处

  1. 更好的做单元测试:业务逻辑可以在没有 UI、数据库、Web 服务器或任何其他外部基础设施的情况下被测试。
  2. 减少对UI框架的依赖:跨端开发,业务逻辑层可以直接复用,只需要做 UI 层的适配。
  3. 基础设施无关性:内层业务逻辑不需要关心数据来自哪里,提交到哪里,比如 LocalStroage、IndexedDB、Web SQL、JSbridge、HTTP、WebSocket。

转化为适用于前端工程的结构

Service,Model 都为纯 JS 类/对象,与框架无关。

基础服务虚线表示并不是直接调用相应的 API,而是封装在工具库或者函数中。

如何真正的落地?

presenter/controller 创建 model,service 实例,并且将 model 注入 service 中。service 中使用 model 做业务逻辑计算。同时 presenter/controller 内调用 service 方法处理 view 事件,同时将 model 返回到 view 层中做数据绑定

问题:model 是纯 JS 对象,如何让 model 数据变更的时候触发 view 的更新?

mobx,@formily/reactive 将 model 变成响应式的;造轮子 - 发布订阅模式

如何在实际项目中落地

使用 vue composition api 或者 react hooks 构建 model,所以 model 就是一个自定义 hooks。

presenter/controller 也是一个自定义 hooks,内部可以调用我们自己定义的 hooks,以及第三方开源的 hooks 库,比如 ahooks,vueuse

因为 model 是一个自定义 hooks ,当内部的 state 更新的时候,就会促发视图 view 的更新。

参考文章

前端架构 101(六):整洁(Clean Architecture)架构是归宿 - 知乎 (zhihu.com)

Clean Frontend Architecture:整洁前端架构 | clean-frontend (phodal.github.io)

干货 | 携程机票 React Native 整洁架构实践 (qq.com)

干货 | Trip.com 机票React Native整洁架构2.0实践 - 腾讯云开发者社区-腾讯云 (tencent.com)

Moving away from ReactJs and VueJs on front-end using Clean Architecture - DEV Community ‍‍

如何结合整洁架构和MVP模式提升前端开发体验 - 整体架构篇的更多相关文章

  1. 如何结合整洁架构和MVP模式提升前端开发体验(二) - 代码实现篇

    上一篇文章介绍了整体架构,接下来说说怎么按照上图的分层结构实现下面的增删改查的功能. 代码结构 vue userManage └── List ├── api.ts ├── EditModal │ ├ ...

  2. 如何结合整洁架构和MVP模式提升前端开发体验(三) - 项目工程化配置、规范篇

    工程化配置 还是开发体验的问题,跟开发体验有关的项目配置无非就是使用 eslint.prettier.stylelint 统一代码风格. formatting and lint eslint.pret ...

  3. MVP模式在Android开发中的应用

    一.MVP介绍      随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互.同一 ...

  4. [译]Google官方关于Android架构中MVP模式的示例

    概述 该示例(TODO-MVP)是后续各种示例演变的基础,它主要演示了在不带架构性框架的情况下实现M-V-P模式.其采用手动依赖注入的方式来提供本地数据源和远程数据源仓库.异步任务通过回调处理. 注意 ...

  5. 扯一扯前端css的整体架构设计:(2)base基础类的那些事儿

    周一下午在实验室写了第一篇博文,有几个人捧场,那咱就得接着下去啊.然后我觉得现在写的内容更多的偏向于谈一下我对于前端css架构的理解和前端经验的一个小总结,所以就把标题里原来的[项目总结]给删掉了.但 ...

  6. 【项目总结】扯一扯电商网站前端css的整体架构设计(1)

    最近半忙不忙的写了一个外包网站,网站主要功能是艺术品竞拍和艺术衍生品的销售.工程已经完成了80%左右,现在前后端代码量已经50W行左右,我主要负责的是前端设计和前端布局.下面就先放一个网站的设计图吧, ...

  7. Google官方关于Android架构中MVP模式的示例续-DataBinding

    基于前面的TODO示例,使用Data Binding库来显示数据并绑定UI元素的响应动作. 这个示例并未严格遵循 Model-View-ViewModel 或 Model-View-Presenter ...

  8. 使用命令行工具提升cocos2d-x开发效率 之CocosBuilder篇

    http://www.cnblogs.com/flyFreeZn/p/3617983.html 假设你正在使用CocosBuilder或者是其它基于CocosBuilder源代码改装而成的工具为你的游 ...

  9. 通过Swagger文档生成前端service文件,提升前端开发效率

    在企业级的项目开发过程中,一般会采用前后端分离的开发方式,前后端通过api接口进行通信,所以接口文档就显得十分的重要. 目前大多数的公司都会引入Swagger来自动生成文档,大大提高了前后端分离开发的 ...

随机推荐

  1. Java JavaMail通过SMPT发送邮件

    概述 本讲讲述如何使用JavaMail工具包,通过SMPT协议,在Java代码中发送邮件. 一.JavaMail简介 JavaMail API提供了一个独立于平台且与协议无关的框架来构建邮件和消息传递 ...

  2. Colab教程(超级详细版)及Colab Pro/Colab Pro+使用评测

    在下半年选修了机器学习的关键课程Machine learning and deep learning,但由于Macbook Pro显卡不支持cuda,因此无法使用GPU来训练网络.教授推荐使用Goog ...

  3. 论文解读(MGAE)《MGAE: Masked Autoencoders for Self-Supervised Learning on Graphs》

    论文信息 论文标题:MGAE: Masked Autoencoders for Self-Supervised Learning on Graphs论文作者:Qiaoyu Tan, Ninghao L ...

  4. SAP IDOC-Segment E1EDP19 Document Item Object Identification

    PO创建时,通过IDOC EDI 接口自动创建SO 案例. BD54 配置逻辑系统 SCC4 给集团分配逻辑系统  SM59 新建RFC 链接 WE21 创建IDOC 处理端口 we20 创建合作伙伴 ...

  5. SAP 复制Client

    原文链接:https://fenginfo.com/102.html 枫竹丹青 SCCL 复制客户端 进入了客户端复制主界面,首先选择参数文件(Selected Profile),虽然此条目为灰色的但 ...

  6. 2022giao考游记

    Day -12: 今年高考准备去考着玩玩,考前心态十分稳健.~~毕竟我才高一/cy~~ 这次高考我倒是没啥目标,主要是来试试水,感受一下高考的氛围,体会一下自己和高三应届生们的水平的差距.也算是丰富自 ...

  7. sql-DQL-单表查询

    单表查询 select [distint]* 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组之后的条件 order by 排序 limit 分页限定 ...

  8. led跑马灯多种方法(移位法,位拼接法,调用模块法,位移及位拼接语法,testbench的理解,源文件的存储路径,计数器的个数,调用模块的方式)

    跟着教程写了几种方法,才发现自己写的虽然能实现,但比较繁琐.教程有三种方法: 1.移位法,每次左移一位,相比我自己写的,优点是不用把每一种情况都写出来.但是需要考虑左移到最后一位时需要自己再写个赋值语 ...

  9. linux学习系列--初识Linux系统

    ### 认识Linux- Linux是一种类UNIX的系统,Unix是1965年在贝尔实验室开发的一个项目,用来开发操作系统- Linux之父-Linus Torvalds在1991年10月5日,他在 ...

  10. DZY Loves Math II

    简要题面 对于正整数 \(S, n\),求满足如下条件的素数数列 \((p_1,p_2,\cdots,p_k)\)(\(k\) 为任意正整数) 的个数: \(p_1\le p_2\le\cdots\l ...