Simple:Flexible Model for MVP and MVVM(附技术分享ppt)

Simple:一个Android Model层架构

项目GitHub地址:Simple

Simple主要实现了MVPMVVM中的M层,是一个Model层框架。其利用了Repository Pattern作为实现方式。Simple可以简化应用中的Model层编码,提供清晰的业务层实现思路。
编写的Simple的目的有以下几点:
  • 提高Model层代码的可测性;
  • 将Model层代码进行分层;
  • 降低对第三方库的依赖以及第三方库代码的侵入性;
  • 提供近乎插件的灵活性和可扩展性;
Simple的特性
  • 低侵入性。框架层未引用任何第三方库或Android API,全部基于JDK开发,通过抽象进行依赖,低层对高层透明;
  • 可测性。Model的层级清晰,相互之间通过接口或抽象类耦合,耦合性很低,便于单元测试;
  • 灵活性。Simple分为三层,每一层都可以被其他实现替代,下层的改变不会影响上层,下层对上层透明,利用注解库如Dagger可以轻松切换每一层的实现方式。
  • 运用设计模式设计,符合设计原则。
Simple架构简图

Simple架构简图

  • Business Service。业务层,通过接口定义功能,View层使用此接口实现业务操作。业务层可以维持多个Repository,用于实现不同的业务需求;
  • Repository。数据仓库,DataSource的代理,用于控制业务代码对数据源的访问(参考代理模式);
  • DataSource。数据源,可以管理多个数据读取者,实现数据切换(本地,网络,缓存等)。将获取数据的请求和请求的实现者进行解耦(参考命令模式
  • DataFetcher。数据读取者,真正请求数据和数据层打交道的对象。
  • 数据层。数据的存储位置。

各模块的依赖关系由上到下。

Simple类图:
tips:图看不清楚可右键新标签页打开或保存到本地再看。

Simple类图

Simple各层依赖关系:

Simple Depends

Simple在MVP架构中的位置:

MVP

在MVVM中的位置:

MVVM

RepositoryManager:

用于管理业务逻辑代码所涉及的所有Repository,在创建View(Repository)时注册,在View销毁时,取消注册,并关闭Repository。

使用Simple+Dagger2+DataBinding+RxJava实现MVVM架构:

1.配置
在应用的build.gradle文件中:
引入Simple library

compile project(‘:library’)

添加Dagger2支持:
在project的build.gradle文件下添加classpath 依赖(注:1.4与databinding不兼容):

dependencies {
classpath ‘com.neenbedankt.gradle.plugins:android-apt:1.8’
}

在app的build.gradle文件下,应用注解处理器插件:

apply plugin: ‘com.neenbedankt.android-apt’//注解处理器

app的dependencies下加入Dagger2依赖:

//dagger2
apt ‘com.google.dagger:dagger-compiler:2.0.2’
compile ‘com.google.dagger:dagger:2.0.2’
//producer,可选
compile ‘com.google.dagger:dagger-producers:2.0-beta’
provided ‘javax.annotation:jsr250-api:1.0’

app的android配置下启用Databinding

dataBinding{
enabled true
}

2.写布局:activity_repo_search.xml( 参考databinding教程)

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <data>

        <import type="android.view.View" />

        <variable
            name="repoVm"
            type="com.simple.creact.simple.app.presentation.viewmodel.RepoViewModel" />
    </data>

    <RelativeLayout android:padding="10dp">

        <LinearLayout
            android:id="@+id/search_container"
            android:layout_width="match_parent"
            android:layout_height="40dp"
            
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值