我们都知道Android中基本组件是Activity,每一个界面都是一个Activity,自从2.3版本号開始。又添加了Fragment组件,提供了适应于各种屏幕方法。可是因为Android系统仅仅是提供了各种可用的编程技术,并没有相应用架构进规定。实践中,非常多项目将全部功能都加入到了Activity中,使Activity变得十分臃肿。不便于进行后期改动和维护。假设我们要一个人来开发一个系统。那么必须採用高效的应用架构,方便调试及维护。

在开发应用中,採用MVC架构无疑是一种最安全的选择。将应用依照控制器、视图、模型来组织,使系统的耦合降低。灵活性添加,更方便于调试和维护。

可是问题就来了,通常程序猿们会说:Android平台全部组件都是基于MVC的,我的应用自然就是基于MVC架构的呀!事实上这是一种典型的错解。Android组件是基于MVC的不假,可是你的程序在Activity中既保存着从网络获取到的数据,又负责页面更新和显示。同一时候还有业务逻辑。这时这个Activity就差点儿同一时候拥有了模型、视图、控制器功能了,实际上是不符合MVC精神的。

那么在Android平台中,如何体现MVC架构呢?关于这一点,非常多不同的看法。在这里仅仅向大家介绍当中的一种。之所以选择这样的,是由于他与IOS平台上的理念一致,我们要同一时候开发Android和IOS系统,那么相同理念的东西,自然是我们最佳选择了。

对于一个Android中最主要的组件Activity来说。我们能够将布局文件视为视图(View)。而Activity能够视为控制器(Controller),控制器须要与视图进行交互,这时就须要在Activity中获取页面中的各个控件,在Android中通过findViewById方法来实现,而在IOS平台中,採用IOutlet形式实现。当视图中产生一个事件,如用户点击某button。这时须要触发一个事件。这时Android有两种处理方式。一种是直接在布局文件里写click=""。还有一种是通过在Activity中通过调用setOnclickListener来实现,我推荐採用另外一种方案。由于这样不仅是避免了视图与控制器逻辑搅合在一起。同一时候也为了与IOS中採用IAction方式保存一致。这样当须要改变界面内容时,能够在Activity中通过对界面中的控件进行操作,而界面中产生的事件,通过Activity中定义的事件处理函数来进行处理。

这样就有效的区分了控制器和视图的职能。

对于界面中须要显示的数据,我们须要设计单独的模型类,Activity在须要时,调用模型类的相关方法,获取数据并显示到界面中。可是模型类不直接调用Activity的方法。那么。假设模型中的数据改变了。如何通知界面进行更新呢?这里我们採用事件总线机制。当模型数据发生改变时,会向系统总线发送一个事件。全部Activity会向自己所感兴趣的事件进行注冊,方法就将自己的Handler实例增加到事件总线的列表中。这样当模型数据改后。事件总件收到来自模型类的事件。找出对该事件感兴趣的Hanlder实例列表,依次向每一个Handler实例发送消息,这样每一个相关的Activity就能够对模型类数据变化做出正确的响应了。在IOS中。每一个类的属性会有willSet,
didSet这种观察者方法,能够在这些方法中向事件总线发送事件。

应用程序架构例如以下图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

从上图能够看出。模型(Model)和视图(View)不会主动调用Activity,同一时候模型(Model)和视图(View)之不发生直接的关系。二者之间的交互都统一通过Activity来进行。

稍后我们将看到。在IOS平台下。我们也会採用同样的架构。

在下一篇博文中。我们将以这个架构为指导,做程序開始时的Splash页面。然后我们会回过头来,描写叙述在IOS平台下。採用Swift 2.0来实现同样的功能。

大家的支持是我继续前进的动力,请大家多多支持:

银行账号:622202 0200 1078 56128 闫涛

我的支付宝:yt7589@hotmail.com

最老程序猿创业开发实训1---Android应用架构之MVC的更多相关文章

  1. 少走弯路,一个老程序猿谈PHP职业发展规划

    PHP是一个使用者非常多的开发语言,但在每个领域里的开发侧重点有所不同互联网方面,在稳定的基础上,更注重性能.高并发,高负载的处理. PHP职业发展规划一般有三条路线,一条技能专精发展路线.另两条,是 ...

  2. Android开发学习之路--Android系统架构初探

    环境搭建好了,最简单的app也运行过了,那么app到底是怎么运行在手机上的,手机又到底怎么能运行这些应用,一堆的电子元器件最后可以运行这么美妙的界面,在此还是需要好好研究研究.这里从芯片及硬件模块-& ...

  3. JavaWeb应用系统开发实训任务(一)

    项目描述: 随着家长对孩子教育的日渐重视,社区幼儿学校在国内逐渐兴起,对社区幼儿学校的信息化管理成为迫切需求.社区幼儿学校管理系统需要实现以下功能: 1)  教师管理:实现对教师信息的查询.删除.增加 ...

  4. 网络project1101班2014-2015学年《网络软件开发实训》期末考试

    注意事项: *考试时间:2014年11月20日 第5.6节. *在计算机D盘,新建目录.并命名"学号+姓名".如:(称为考生目录.下同).考试中全部文件必须保存在此目录下. *启动 ...

  5. unity3d游戏开发猜想——当程序猿老去

    程序猿将代码注入生命去打造互联网的浪潮之巅.当有一天他们老了.会走向那里,会做些什么? 4.4.0" alt="" style="border:0px; ver ...

  6. 关于App程序猿泡沫

    前言 做开发快七年了,对于程序猿,外行人总有着数不完的讽刺和误解,可是我都懒得去解释.代码搬运工人也好,民工也罢,随他们去说吧.可是网上近期流传的程序猿泡沫,尤其是APP程序猿泡沫的文章导致非常多我们 ...

  7. 苦B的程序猿道路数据验证

    发生了什么 再一次苦B程序猿和苦C程序猿结对话发生编程周期 此代码: public void deleteAllExtendAclsFromContent(String contentId) thro ...

  8. 软件工程实训项目案例--Android移动应用开发

    实训过程 角色分工 1.项目经理:负责项目的组织实施,制定项目计划,并进行跟踪管理 2.开发人员:对项目经理及项目负责 3.需求分析员:负责系统的需求获取和分析,并协助设计人员进行系统设计 4.系统设 ...

  9. CSDN日报20170401 ——《假设你还是“程序猿”,我劝你别创业!》

    [程序人生]假设你还是"程序猿".我劝你别创业! 作者:北漂周 在IT这一行做得久了,会接触到无数让人哭笑不得的外行话. 「我们就差一个写代码的了」是当中典型的一种,之所以黑它.不 ...

随机推荐

  1. 用Martini、websocket实现单机版聊天室

    ChatRoom A stand-alone ChatRoom in Martini Please Star https://github.com/renleimlj/ChatRoom Interfa ...

  2. [转] Redis在windows下安装过程

    转载自(http://www.cnblogs.com/M-LittleBird/p/5902850.html) 一.下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下载的win ...

  3. 了解Selenium与自动化测试第一天“云里雾里”

    以前没有搭建过Selenium自动化功能测试环境,想象中就像QTP一样,集成IDE一般简单快捷. 昨天通过博客园的一篇博友日志,才开始大概认识到Selenium的工作方式与特征: 1.插件般与浏览器结 ...

  4. Statement和PreparedStatement深入学习总结

    最近在看java安全编码方面的书籍,在看到SQL注入漏洞的问题时,引发了我对Statement和PreparedStatement深入总结的欲望,废话少说,下面咱们就正式开始. 当初始的SQL查询被修 ...

  5. python学习笔记- 补遗

    1.extend 和 append区别 extend 和 append区别 #extend接受list参数,添加每个元素至原list尾端 >>> l=[1,2,3] >> ...

  6. Codeforces_768_D_(概率dp)

    D. Jon and Orbs time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  7. Analysis of container and Injection in Java, their history and future.

    Container: 发展历程: 2000 年的时候 FreeBSD 开发了一个类似于 chroot 的容器技术 Jails,这是最早期,也是功能最多的容器技术.Jails 英译过来是监狱的意思,这个 ...

  8. ThinkPHP---TP功能类之分页

    (1)核心 数据分页通过limit语法实现 (2)分页类 ThinkPHP里系统封装好了分页类:Page.class.php (3)代码分析 位置:Think/Page.class.php, ①查看相 ...

  9. 【6.24校内test】T1 江城唱晚

    [题目背景] 墙角那株海棠,是你种下的思念. 生死不能忘,高烛照容颜. 一曲江城唱晚,重忆当年坐灯前, 青衫中绣着你留下的线. ——银临<江城唱晚> [问题描述] 扶苏是个喜欢一边听古风歌 ...

  10. Monkey进行测试时如何屏蔽掉状态栏和音量键

    我在学习的过程中使用简单的点击命令总是会触发到音量键和状态栏,由于我的测试机是虚拟按键所以也会触碰到 接下来说一下解决办法 全屏状态  adb shell settings put global po ...