最老程序猿创业开发实训1---Android应用架构之MVC
我们都知道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的更多相关文章
- 少走弯路,一个老程序猿谈PHP职业发展规划
PHP是一个使用者非常多的开发语言,但在每个领域里的开发侧重点有所不同互联网方面,在稳定的基础上,更注重性能.高并发,高负载的处理. PHP职业发展规划一般有三条路线,一条技能专精发展路线.另两条,是 ...
- Android开发学习之路--Android系统架构初探
环境搭建好了,最简单的app也运行过了,那么app到底是怎么运行在手机上的,手机又到底怎么能运行这些应用,一堆的电子元器件最后可以运行这么美妙的界面,在此还是需要好好研究研究.这里从芯片及硬件模块-& ...
- JavaWeb应用系统开发实训任务(一)
项目描述: 随着家长对孩子教育的日渐重视,社区幼儿学校在国内逐渐兴起,对社区幼儿学校的信息化管理成为迫切需求.社区幼儿学校管理系统需要实现以下功能: 1) 教师管理:实现对教师信息的查询.删除.增加 ...
- 网络project1101班2014-2015学年《网络软件开发实训》期末考试
注意事项: *考试时间:2014年11月20日 第5.6节. *在计算机D盘,新建目录.并命名"学号+姓名".如:(称为考生目录.下同).考试中全部文件必须保存在此目录下. *启动 ...
- unity3d游戏开发猜想——当程序猿老去
程序猿将代码注入生命去打造互联网的浪潮之巅.当有一天他们老了.会走向那里,会做些什么? 4.4.0" alt="" style="border:0px; ver ...
- 关于App程序猿泡沫
前言 做开发快七年了,对于程序猿,外行人总有着数不完的讽刺和误解,可是我都懒得去解释.代码搬运工人也好,民工也罢,随他们去说吧.可是网上近期流传的程序猿泡沫,尤其是APP程序猿泡沫的文章导致非常多我们 ...
- 苦B的程序猿道路数据验证
发生了什么 再一次苦B程序猿和苦C程序猿结对话发生编程周期 此代码: public void deleteAllExtendAclsFromContent(String contentId) thro ...
- 软件工程实训项目案例--Android移动应用开发
实训过程 角色分工 1.项目经理:负责项目的组织实施,制定项目计划,并进行跟踪管理 2.开发人员:对项目经理及项目负责 3.需求分析员:负责系统的需求获取和分析,并协助设计人员进行系统设计 4.系统设 ...
- CSDN日报20170401 ——《假设你还是“程序猿”,我劝你别创业!》
[程序人生]假设你还是"程序猿".我劝你别创业! 作者:北漂周 在IT这一行做得久了,会接触到无数让人哭笑不得的外行话. 「我们就差一个写代码的了」是当中典型的一种,之所以黑它.不 ...
随机推荐
- jQuery中$this和$(this)的区别
要写一个点击弹窗任意地方,关闭弹窗.点击事件写标签在元素上 onclick = closepop(this),这时候很容易搞不清楚怎么去获取当前元素 function closepop(e){ va ...
- DWARF调试格式的简介
DWARF调试格式的简介 Michael J. Eager, Eager Consulting Feb, 2007 翻译:吴晖 2012年2月 如果我们可以编写确保能正确工作且永远不需要调试的程序,这 ...
- MySql (二)入门语句和基本操作
mysql的入门语句:查看服务器下的库 show databases; 创建库(数据库被创建后它的名字是不可以更改的) create database 数据库名; 2.1.插看当前所在的库 selec ...
- re模块,正则表达式
re模块 作用:取文本或者字符串内你所需要的东西 正则表达式的大致匹配过程是:依次拿出表达式和文本中的字符比较,如果每一个字符都能匹配,则匹配成功:一旦有匹配不成功的字符则匹配失败. ^叫做元字符,元 ...
- CAD得到当前选择的实体(网页版)
主要用到函数说明: IMxDrawSelectionSet::CurrentSelect 得到当前已经选择的实体.详细说明如下: 参数 说明 filterData 过滤条件 js中使用如下: 1 2 ...
- JAVA程序员面试笔试宝典3
1.什么是线程?它与进程有什么区别?为什么要使用多线程 线程是指程序在执行过程中,能够执行程序代码的一个执行单元.进程是指一段正在执行的程序. 使用多线程可以减少程序的相应时间 与进程相比,线程的创建 ...
- Eigen库笔记整理(一)
首先熟悉Eigen库的用途,自行百度. 引入头文件: // Eigen 部分 #include <Eigen/Core> // 稠密矩阵的代数运算(逆,特征值等) #include < ...
- UVALIVE6886 Golf Bot (FFT)
题意:打高尔夫 给你n个距离表示你一次可以把球打远的距离 然后对于m个询问 问能否在两杆内把球打进洞 题解:平方一下就好 注意一下x0的系数为1表示打一杆 才发现数组应该开MAXN * 4 之前写的题 ...
- 出现For input string: "" 错误
然后是因为后台生成的是一个数组,前台取的是一个对象,所以会产生这个错误 前后台交互时 mv.addObject("vo1",fhList.get(0));}将数组改成fhList. ...
- 一个小demo熟悉Spring Boot 和 thymeleaf 的基本使用
目录 介绍 零.项目素材 一. 创建 Spring Boot 项目 二.定制首页 1.修改 pom.xml 2.引入相应的本地 css.js 文件 3.编辑 login.html 4.处理对 logi ...