Andorid项目架构篇----MVP + Clean Architecture

这一篇的例子,是基于Clean Architecture原则。

它是基于上一篇最最简单的MVP 架构demo,在表现层和存储库之间,添加了域层(domain ),将app分为3层:

Andorid项目架构篇----MVP + Clean Architecture_第1张图片Clean Architecture 是一种软件架构思想吧,地址: https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html,

大概看了下,就是总结了常用的系统架构思想,比如:

  1. Independent of Frameworks   与使用的框架独立,不依赖某个框架,而是将框架当做工具使用,而不是将你的系统套进某个框架中
  2. Testable  可测试性,业务规则是可以测试的,在没有UI, Database, Web Server或其他的外部组件的情况下。
  3. Independent of UI  独立UI,页面可以轻松地改变,在不修改系统其他部分代码。可以用控制台UI替换Web UI,而不需要更改业务规则。
  4. Independent of Database  独立数据库,可以轻松地改变。业务规则不绑定到数据库。
  5. Independent of any external agency 独立于任何外部机构,应该说的是不依赖外部的组件或库等。

这里呢,将系统分为4个同心圈:

Andorid项目架构篇----MVP + Clean Architecture_第2张图片

  • The Dependency Rule  依赖规则,这是最重要的原则,这条规则说源代码依赖关系只能指向内部。也就是高内聚低耦合。圆圈内部和外部的分离,双方的改变互不影响。

  • Entities 实体类(这个像JavaBean类),封装企业范围的业务规则,也就是最通用的规则,可以是一个带方法的object对象,或者一个数据,一组数据结构,一个方法。可以在企业不用应用间复用。任何操作的变化,都不应该改变实体层(Entities )

  • Use Cases 用例,这一层是特定的业务逻辑。它封装和实现了系统的所有用例。使用Entities 实体类来实现特定的业务逻辑。这层的改变,不会影响Entities 层,也不会受到database,UI, 或者其他通用框架的变化的影响。当然,应用的操作的变化,会影响到用例的变化。

  • Interface Adapters 接口适配器,将Entities或者Use Cases与其他外部持久层框架的数据转换(Database ,Web等)。这层包含一个GUI的完整MVC架构。 Presenters,Views ,Controllers 都属于这一层。

  • Frameworks and Drivers 框架和驱动,最外层,通常是Database, Web Framework等

  • Crossing boundaries. 跨越边界 ,不同层的交流吧,通常使用“依赖倒置原则”。为了不违反依赖规则,内部圆和外部圆不能直接调用,所以一般可以通过集成接口,接口调用来通信。还有个类似的方法,多态。

好了,继续回到MVP+Clean Architecture

首先知道三个概念:

  • MVP:上篇最基础的项目中的 Model  View  Presenter 模型。
  • Domain:包含所有业务逻辑。域层主要以 用例(use cases或交互(interactors ) 。这些用例提供了开发者所有能执行的来自展示层的行为。
  • Repository:最基础的项目中的存储库。

关键点

  1. 和MVP项目最大的不同是,使用了域层和用例。将域层从presenters中移除,来避免presenters 层的代码重复。例如两个页面都有同样的筛选功能。
  2. 用例(Use cases )定义了app需要的所有操作。
  3. 用例(Use cases )有利于域层的操作复用。
  4. 用例(Use cases )使用命令模式,在后台线程运行。域层可以和 Android SDK 或其他第三方库完全解耦。(是只有业务代码吗?)

小问题

  项目中使用了异步存储库(也可以通过RxJava 或Promises实现),但是没必要,以为用例的执行都是再主线程外,只是为了看着更真实。

  项目中的View, domain 和 API 层是一个,因为该项目中是不变的,推荐在我们自己项目中,使用不用的View, domain 和 API 层。

总结

it's an MVP approach with a new layer that handles domain logic.

就是在MVP架构增加了一层处理纯业务逻辑。

项目地址 :https://github.com/googlesamples/android-architecture/tree/todo-mvp-clean/ 

你可能感兴趣的:(Android技术学习)