根据实际项目浅谈Android项目中的框架搭建

这是知天气实践中的架构搭建方式,建议先下载应用【应用宝,或腾讯bugly分发平台】体验下,以免浪费你的时间O(∩_∩)O~~。

项目的构架搭建过程包括MVP的使用,MVP使用中P层的组织,Model层的管理,以及划分P层和Model层的理解。除了项目的框架部分,结构分包方式也很重要,一个好的分包方式能让项目更加清晰,开发过程也会更有效率。除此之外,再加上一些第三方开源框架就能很好的搭建出一个Android应用了。

MVP的使用(纵向)

关于MVP的介绍和优点分析的文章很多,可以自行google。主要分析项目中的应用。

MVC

MVC全名是Model View Controller,如图,是模型(model)-视图(view)-控制器(controller)的缩写

MVC是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC是一种很被广泛使用的框架,但在Android开发中,Activity并不是一个标准的MVC模式中的Controller,它的首要职责是加载应用的布局和初始化用户界面,并接受并处理来自用户的操作请求,进而作出响应。随着界面及其逻辑的复杂度不断提升,Activity类的职责不断增加,以致变得庞大臃肿。

MVP

MVP从更早的MVC框架演变过来,与MVC有一定的相似性:Controller/Presenter负责逻辑的处理,Model提供数据,View负责显示。可以看做MVP就是将MVC中Controller更加细分开来,减少Controller的体积,这很好理解,如果一个类过于庞大,不妨在将其细分,除此之外将View和Model的通信隔绝,都通过Presenter来传递。

这里箭头的指向值得是依赖关系,Model不应该依赖上层的逻辑,所以应该是单向的。

MVP在Android中的体现

  • View:负责绘制UI元素、与用户进行交互(在Android中体现为Activity,frament等等)
  • Model:负责存储、检索、操纵数据(有时也实现一个Model interface用来降低耦合)
  • Presenter:作为View与Model交互的中间纽带,处理与用户交互的负责逻辑。
  • *View interface:需要View实现的接口,View通过View interface与Presenter进行交

使用

上面的框架只是一些理论式的知识,具体的应用中还需要更加详细的设计,如:

  • Presenter具体是什么,该怎么和View层交互
  • Model层和Presenter怎么划分,怎么管理
  • 对应到Android项目中的生命周期是怎样的
  • 不同层之间的通信方式
  • 使用中应该注意什么

Presenter其实就是一些普通的类,只是负责将View层(Activity等)中的只和当前View的业务逻辑放在这一层来避免随着业务的增多导致View层过大,如很多应用的主界面,然后通过接口来和View交互。生命周期也应该和View保持一致。并要注意避免由于持有View的引用而导致View结束时内存泄露的产生。

Presenter层和Model的划分问题,经常见到的说法是Model层应用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法,如数据的存储与获取等。这种说法没什么问题,但是和Presenter在一起使用的时候容易让人迷惑,Presenter也是处理逻辑,Model也是处理逻辑,那应该怎么区别呢,我的理解是看这些逻辑能否被共用,如果能被多个View或Presenter共用,那这部分逻辑应该放到model层,否则应该在Presenter。Model由于共用的原因,所以其生命周期应该和应用的生命周期保持一致,而写需要一个管理类ModelManager来统一管理。

对于View层与Presenter层,通过接口的方式进行通信,所以View与Presenter是强依赖关系,是共同存在。而Presenter层与Model层则是通过事件总线库如EventBus,我是用的Router,主要是用起来更方便。这样Presenter层与Model层关系是弱依赖,因为它们的生命周期不同,而且一个Model肯需要对多个Presenter服务。

下面是总结出来的框架图:

结合上面的图在总结一下,Presenter应该是单一职责的,只用于处理一个View的逻辑,而一个View可以有多个Presenter,以避免如果View中逻辑过多而导致单个Presenter过于庞大臃肿。而Model层应该被共用,以体现其复用性。

在实际的使用中应该注意的是:

1.不要死板的按照这个框架,不是任何View都需要一个Presenter,有些View可能只是个很简单的页面,再去写个Presenter就真的为了框架而框架了,这时候框架对你的开发起到的反而是阻碍作用。

2.注意Presenter持有View导致的内存泄露问题,因为二者是强依赖关系,所以在View相应的生命周期对Presenter进行绑定和解绑,也可以通过若引用来持有View对象,但我觉的这是可以自己来避免的,用若引用来处理的方式是一种不好的思想。

MVP搭建的纵向的框架,横向的分割依据AOP面向切面的思想,主要是提取出共用方法作为一个单独的Util,这些Util会在App整体中穿插使用。很多人的App都会引入自己封装的Jar包,封装了包括文件、JSON、SharedPreference等在内的常用操作,自己写的用起来顺手,也大幅度降低了重复作业。

项目划分方式

框架搭好后,还需要好的分包方式来管理,我偏向于先根据模块划分,然后在不同的模块里在再按逻辑划分。这样可以很好的使项目模块化,而且开发的时候更方便。


不要畏惧构架,也不要过度设计,具体过度设计的度,可能就需要经验了,但不实践,永远也不会有这个经验。

知天气已开源

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容