Android中的mvc包管理Demo

我是robotking-Guetrobot,欢迎大家在评论区指出文中的不足之处,或者联系QQ:529169501

引言:在Android开发的过程中,我们往往会选择一种设计模式,mvp或者是mvc等等,mvp也是最近一两年十分流行的一个整体的项目分布架构,今天我们就先来说说我对mvc的一个理解,以及在使用mvc架构的时候如何进行分包和分类的管理;

1. mvc模式简介

        mvc设计模式中的m代表模型层,v代表视图层,c代表控制层,但是在Android中部分的开发者在项目的实际开发过程中对mvc的真正运用其实是有一些偏差的,在android中我们可以将xml布局文件看成是我们的v视图层,而model是负责网络数据的加载和数据的提供,c控制层是负责控制数据加载和视图展示,mvc与mvp主要区别在于mvc中m和v层之间是可以相互直接的交互,而mvp中的mv是不能直接交互的,需要通过p层来交互,如图所示;


图 1-1

2.Android中mvc的包管理

2.1 初级开发项目常见的分包管理

图 2-1

这种分包结构是大部分的初级开发人员都会经历的一种包管理的方式,完全没有层级结构,业务、界面,逻辑都耦合在一起,如果在多人开发的过程中往往会出现各种问题,我们可以把这种分包模式称之为按照层级分包Package By Layer,简称PBL分包模式;按class职能分层(PBL)降低了代码耦合,但带来了package耦合,要添新功能,需要改model、dbHelper、view、service等等,需要改动好几个package下的代码,改动的地方越多,越容易产生新问题;

2.2 我对mvc分包管理的理解和具体项目的实现

       由于部分开发者都使用Activity或者Fragment来作为控制层,而且大部分的业务逻辑都写在Activity里面,这就导致Activity特别的臃肿,维护十分困难,接下来我来说一下我使用mvc的一个分包格式,当然其实这种以分包来进行类管理的基本还是比较适合小型的项目,比较大的或者是门户型的应用建议使用组件化或者是插件化来进行具体的实现,如图2-2;


图 2-2

如图所示的分包结构,我们可以称这种分包模式为PBF(按功能分包Package By Feature)与小部分的PBL相结合的方式,那么我们首先来说一下PBF相比较于PBL的分包模式,我觉得有以下优点;

1. package内高内聚,package间低耦合

按照PBF的分包模式,每一个模块相关的类都放在对应的模块当中,模块内部实现了高内聚,而各个包之间实现了低耦合的关系

2.很容易删除某一个功能

如果是PBL的分包,当我们需要删除某一个功能的时候,我们要挨个包去找对应的类,一个个删除,这很可能会导致各种错误,而PBF分包,我们就可以直接进行整个功能包的删除,达到快速删除功能的实现;

3. 高度抽象,只通过class类来分离对应的逻辑代码

我们在解决实际问题的过程中通常是从抽象到具体,而PBF模式正好符合这种规则,每一个模块都是高度抽象的,然后模块内部进行具体细节的实现,而且在PBF模式中我们不用在进行分包和分离class来进行逻辑代码的管理,只采用class分离就可以实现了.

2.3 本项目的分包分类管理思想

那么在这个demo当中我在功能划分上面总体采用的是PBF的分包模式,但是在每通用的一些基类,工具类,管理类中我采用的是将其分在同一个包下面,这其实可以看做是一个辅助功能模块,它辅助其他的每一个功能模块,所以在内部采用了分包分类的管理方式,即PBL,主要是为了实现代码的复用,而且并不影响其他功能的高内聚与低耦合性;

本项目的列表显示和表格布局采用的是listview,gridview,而没有使用RecyleView,其实listview与gridview其实是一种典型的mvc的设计模式,adapter负责控制数据的展示方式,所以这里我将Adapter归为到控制层中去,而从Adapter抽取出来的holder归为视图展示层,这里holder主要是引入布局和通过adapter传递过来的数据进行控件的设置如图2-2所示:

与一般的mvc不同的是,这里我将所有的Activity及Fragment的视图显示都抽取到了对应的displayview的包下面进行视图的统一管理,在代码层实现了C控制层Activity臃肿的问题,如图2-3所示:

图 2-3

3. 项目的总体框架和具体实现的功能

3.1 项目实现了几个比较简单的功能,主要的功能图如下图所示:

图 3-1 粒子动画


图 3-2 具体功能实现

3.2 项目基类的基本抽取

项目主要抽取了如下基类:

图 3-3

这里着重介绍一下BaseUiDisplay与BaseNetRequest,BaseUiDisplay主要是通过网络数据的加载情况来显示加载失败,错误,空,成功的界面,其中前三个视图是所有界面都都一致的,而成功视图交给具体子类去实现,BaseNetRequest主要用于做网络数据请求,用于返回网络请求的结果,最终通过数据结果返回状态通知ui进行对应的显示,这里为了方便我没有做缓存处理,需要详细了解的请移步到我的github上面进行源码下载;

项目具体地址:https://github.com/ZwjDreamMail/robotMVC

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

推荐阅读更多精彩内容