营业架构营业架构狗万手机版下载_狗万客户端设_狗万手机版下载_狗万客户端
网站地图

狗万手机版下载_狗万客户端

CHINESE|ENGLISH

Welcome to Shaanxi Haisheng Fresh Fruit Juice Co., Ltd

营业架构营业架构狗万手机版下载_狗万客户端设
发布时间:2019-10-31 点击次数: 打印 字号:T|T

  前不久刚结束对 20 模块项目的第 3 轮重构,一路见证 MVC、MVP、Clean 的优缺点并形成自己的体会。

  近期在总结工作经验的同时,开始写博客。狗万手机版下载_狗万客户端顺便开源了我设计的 ViaBus 架构。

  但 MVP 架构有其局限性。按我的理解,MVP 设计的初衷是,“让天下没有难替换的 View 和 Model”。该初衷背后所基于的假设是,“上层逻辑稳定,但底层实现更替频繁” 。在这个假设的引导下,使得三者中,只有 Presenter 具备独立意志和决定权,业务架构掌管着 UI 逻辑和业务逻辑,而 View 和 Model 只是外接的工具。

  然而,这样的假设多数时候并不实际。可视化需求是变化多端的,在牵涉到视觉交互时,必然涉及 UI 逻辑的修改,也就是说,View 和 Presenter 的相互牵连,使得 UI 的改动需要 View 和 Presenter 编写者配合着完成,增加沟通协作成本。

  长久来看,二者都难以成长。Presenter 编写者容易被各种非本职工作拖累,View 的编写者不会尝试独立自主,例如通过多态等模式将 UI 封装成可适应性的组件,反正 ... 有 Presenter 来各种 if else 嘛。

  为解决 Presenter职能边界不明确的问题,在 Clean 架构中,业务逻辑的职能被转移到领域层,由 Usecase 专职管理。Presenter 则弱化为 ViewModel ,作为代理数据请求,和衔接数据回调的缓冲区。

  View 对 ViewModel 的单向依赖,是通过 databinding 特性实现的。ViewModel 只负责代理数据请求,在 Usecase 处理完业务返回结果数据时,结果数据被赋值给可观察的 databinding 数据,而 View 则依据数据的变化而变化。

  但 Clean 架构也有不足:粒度太细 。一个 Usecase 受限于请求参数,因而只能处理一类请求。View 请求的数据包含几种类型,就至少需要准备几个 Usecase。Usecase 是依据当前 View 对数据的需求量身定制的,因此Usecase 的复用率极低,狗万手机版下载_狗万客户端,项目会因而急剧的增加类和重复代码。

  AAC 也是数据驱动编程。只不过它不依赖于 MVVM 特性,而是直接在 View 中写个观察者回调,以接收结果数据并处理 UI 逻辑。

  你完全可以将其理解为 B/S 架构:从 Web 前端向 Web 后端发送了数据请求,后端在处理完毕后响应结果数据给前端,前端再依据需求处理 UI 逻辑。等于说,AAC 将业务完全压到了 Model 层。

  上一轮重构项目在用 Clean 架构,为此我决定跳过 AAC,基于对移动端数据交互的理解,编写“消息驱动编程”架构。

  UI 的作用是视觉交互,业务架构设计图为此UI 的职责范围是请求数据和处理 UI 逻辑。业务的作用是供应数据,因此业务的职责范围是接收请求、处理数据、返回结果数据。

  UI 不需要知道数据是怎么来的、通过谁来的,它只需向 bus 发送一个请求,如果有业务注册了该类 “请求处理者”,那么自然有人来处理。业务也无需知道 UI 在拿到数据后会怎么用,它只需向 bus 回传结果,如果有 UI 注册了“观察响应者”,那么自然有人接收,并依据响应码行事。

  这样,在静态 bus 的加持下,UI 和业务是完全解耦的,从根本上解决了相互牵连的问题。此外,狗万手机版下载_狗万客户端!不同于上述架构的每个 View 都要对应一个 Presenter 或 ViewModel,在 ViaBus 中,一个模块中的 UI 可以共享多个“业务处理者”实例,使代码的复用率提升到100%。