• Stars
    star
    99
  • Rank 343,315 (Top 7 %)
  • Language
    Java
  • License
    MIT License
  • Created over 8 years ago
  • Updated over 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

implements android clean architecture

overview

如果图片看不到,可能是因为防盗链了,请直接看这里 http://www.jianshu.com/p/cba6663435c7 也可以在这里提出你的疑问,多谢

特性

简单的实现了一下Android-Clean-Architecture,使用到了一些比较优秀的库

realm 目前最流弊的移动端db

rxjava 一切都是流,你懂得

butterknife 视图注入框架

glide 图片加载框架

retrofit 网络请求框架,可以与rxjava搭配

原理

最近 Android-CleanArchitecture 闹得是沸沸扬扬,然而笔者也不甘寂寞,一直在研究这个东西,看过,不少的实现。

比如 android10 大神的实现 https://github.com/android10/Android-CleanArchitecture 比如 googlesample 的实现 https://github.com/googlesamples/android-architecture/tree/todo-mvp-clean/ 比如 dmilicic 大神的实现 https://github.com/dmilicic/Android-Clean-Boilerplate

Boilerplate 其实就是 模板的意思了,相信大家也看过不少这个词了。

然而,架构方面的文章也很多,但是,究其源头,无非都是出自uncle-bob 叔叔的这篇 https://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html。 至于大家为什么大谈特谈,那一定是有他的道理的。就好比,用了CleanArchitecture,你会得到以下好处。

代码复用性更高 更易于测试 耦合度更小

下面这幅图,是googlesample下面的了。 googlesamples

下面这幅图,是uncle-bob画的了。 uncle-bob

细心的你已经发现了,这两个图其实是一个意思。从大的方向上看,都是三层结构。

DataLayer

最底层,完全不知道有DomainLayerPresentationLayer的存在,听到这里,你还在怀疑这个架构的可测试性耦合度低吗?那么DataLayer的主要职责是什么? 1、从网络获取数据,向网络提交数据,总之就是和网络打交道。 2、从本地DB,shareprefence等等,内存等,总之就是本地获取数据,缓存数据,总之就是和本地数据打交道的。 这也就是你为什么看到很多Android-CleanArchitecture 的 package里面有一个local ,和一个remote了,然而是否有必要分的这么细,个人习惯啊~,不强求。反正这一层如果出现了 anroid.os***,我就更你拼了,对不起,你已经偏离了Android-CleanArchitecture了。

DomainLayer

中间层,他完全不知道有一个PresentationLayer存在,他只知道,有DataLayer,他可以基于这些数据,建立很多玩法,比如去网络拿一堆名人回来,然后将这些数据缓存到本地,在比如,他写了一篇黑某明星的文章,将文字发布到网上等等。因此他的主要职责是: 1、控制DataLayer对数据做增删改查,没错,就这么简单,然后就没有然后了。 2、真的没有了,不骗你,但是这一层如果出现了 anroid.os***,我就更你拼了,对不起,你已经偏离了Android-CleanArchitecture了。

PresentationLayer

最上层,他知道DomainLayer,有人要问了,那么他知道DataLayer,回答,他知道你妹~ 他累不累啊,要知道这么多? 因此,它只知道DomainLayer,那么他的职责有哪些? 1、通知DomainLayer有活干了,根据DomainLayer反馈变化界面 2、通知DomainLayer有活干了,根据DomainLayer反馈变化界面 3、通知DomainLayer有活干了,根据DomainLayer反馈变化界面 这年头,重要的时间一定要说三遍,而且,就是这么任性~~

分析了每层之后,我们发现,依赖的关系是 PresentationLayer --> DomainLayer --> DataLayer 的。 DomainLayer --> DataLayer 不知道有android平台的存在。 因此,只要我们围绕这个原则去做架构,那么就称的上是Android-CleanArchitecture。

todo

dagger2依赖注入,随便比较难理解吧,但是用上之后,显然要大幅降低耦合。

More Repositories

1

text2video

半个神器👉一键文本转视频的工具
Python
914
star
2

flutter_chat_box

Flutter开发的和ChatGPT聊天的App,全平台支持
Dart
586
star
3

gpt-frontend-code-gen

一个生成前端页面和组件代码的神器,支持Chakra UI 、ShadcnUI ,支持本地大模型、可对话不断调整效果,直到获得满意的效果
JavaScript
226
star
4

mvp-demo

MVP实现一个属于你自己的关于展示最近电影的app
Java
198
star
5

flutter_template

一个flutter高效开发的模板
Dart
186
star
6

flutter_me

一个使用flutter开发的私人应用,主要就是玩一玩
Dart
78
star
7

dim

封装的一个腾讯云im,以便于flutter开发者可以方便继承im到自己的应用中
Objective-C
64
star
8

dalipush

集成了阿里推送,提供给flutter开发者使用。
Java
56
star
9

swiftBookRecommend

起点小说推荐app
Swift
51
star
10

raderView

雷达搜索效果
Java
47
star
11

search-engine-tool

可能是免费中最好的搜索引擎API,支持Google,Bing,DuckDuckGo,Yahoo
JavaScript
47
star
12

moveSpider

创建工程
HTML
44
star
13

halib

一个快速Android开发框架,涵盖github比较牛逼的项目
Java
35
star
14

fdflutter

另外一个一个flutter快速开发框架,参考这篇文章https://mp.weixin.qq.com/s/X2b3sviE420Z0T27l7Dang
Dart
28
star
15

inote

基于艾宾浩斯记忆遗忘曲线的复习笔记
Dart
27
star
16

tauri-chat-box

一个适合初学者学习的,使用tauri实现的 chatgpt 聊天桌面端App
TypeScript
22
star
17

OFFlib

app体验增强测试,实现app离线发送,秒发送,后台静默发送
Java
16
star
18

utools-plugin-template

utools开发插件模板
TypeScript
13
star
19

react-ai-chat

react native ai chat box
TypeScript
12
star
20

Analyser

这里有各种学习demo,如AIDL,绘图,动画,aop,以及内存泄露分析等等
Java
11
star
21

android_auto_track

安卓自动化埋点
Java
10
star
22

post_photo_widget

A new Flutter plugin that can send photos similar to WeChat moments 发送微信朋友圈九宫格照片
Dart
7
star
23

mbus

专属公交,深圳专用,私人定制,不含广告,业界良心,拒绝商业用途
Java
6
star
24

wikiHowTo

Wiki How to 的中文版本,觉得挺有意思的,希望大家一起把这个项目维护起来
Dart
5
star
25

tip-flutter-ui

igame ui widget for our project ,such as colorText show html,marquee,and Textswitcher.
Dart
5
star
26

statis-report-framwork-android

性能数搜集及上报系统Demo
Java
4
star
27

sider_bar

listview sider_bar over right for index listview item
Dart
4
star
28

RecordDemo

C++
3
star
29

csdn

该app用到了halib,完全是为了自己方便在手机上查看自己喜欢的博主是否更新了文章,该APP主要列出博主的文章列表,看文章还是需要使用到浏览器的,看代码要是要着色好看一些,哈哈,其实还是自己时间有限,偷懒,撸了半天而已,代码写得比较渣,等有机会重构一下。
Java
3
star
30

topic_text

topic text like webo ## wrap text ,which can click,自动识别 ## 包裹的话题,可以点击
Dart
2
star
31

react-fusion-x

一个快速开发框架
TypeScript
2
star
32

chengyu

Java
1
star
33

btcoin

btcoin test
Dart
1
star
34

SimpleLiveData

do something like live data to share data between activity and fragment
Java
1
star
35

my_tags

小程序,记录我自己的关键字,记录自己摘抄的人生格言
JavaScript
1
star
36

utools-js-code-to-svg-flowchart

utools-js-code-to-svg-flowchart
TypeScript
1
star
37

fd-react

一个支持h5快速开发的react框架,zusland,swr,arco ui ,localforge,react-router,typescript
TypeScript
1
star