网站首页 > 技术文章 正文
如果你无法接受 TypeScript,不建议继续阅读此系列文章
本文不详细介绍什么是整洁架构以及 MVP 模式,自行查看文章结尾相关链接文章。
整洁架构粗略介绍
下图为整洁架构最原始的结构图:
- Entities/Models:实体层,官方说法就是封装了企业里最通用的一部分逻辑,也可以叫 Models, 可能是只包含数据字段的对象,也可能包含方法,具有一部分业务逻辑。更加深入就是领域驱动(DDD)开发相关的内容。
- Use Case/Service:包含核心业务逻辑。
- Interface Adapter:适配层/胶水层,负责内圈的 entity 和 use case 同外圈的 external interfaces 之间的数据转化。需要把外层服务的数据转化成内层 entity 和 usecase 可以消费的数据,反之亦然。
- External Interfaces:依赖的外部服务,第三方框架,以及需要糊的页面 UI 都归属在这一层,这一层完全不感知内圈的任何逻辑,所以无论这一层怎么变( 组件库由 Element UI 改为 Ant Design Vue ,数据库由 MySQL 改为 PostgreSQL ),都不应该影响到内圈。
这不就是后端的 mvc 吗?
好处
- 更好的做单元测试:业务逻辑可以在没有 UI、数据库、Web 服务器或任何其他外部基础设施的情况下被测试。
- 减少对UI框架的依赖:跨端开发,业务逻辑层可以直接复用,只需要做 UI 层的适配。
- 基础设施无关性:内层业务逻辑不需要关心数据来自哪里,提交到哪里,比如 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 的更新。
作者:若邪
链接:
https://juejin.cn/post/7135632949587738655
猜你喜欢
- 2025-04-05 企业网站架构设计方案(企业网站架构设计方案怎么写)
- 2025-04-05 编程自学前端入门篇之typeScript(前端编程工具)
- 2025-04-05 我把家搬进了NAS?家庭资产数字化革命,现在连袜子都有编号了!
- 2025-04-05 加入 Web 组件 JavaScript 框架派对
- 2025-04-05 Apple 机器学习框架 MLX 在 Node.js 环境终于可用了!
- 2025-04-05 JAVASCRIPT的5项前沿技术(js前端技术)
- 2025-04-05 uniapp 多端应用开发框架(uniapp使用ui框架)
- 2025-04-05 Handsontable:强大的前端电子表格组件库
- 2025-04-05 Flask 基础理解(flask documentation)
- 2025-04-05 JS 最新提案 Signals(信号),stage 0 草案正式发布!
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle约束 (46)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)