最老程序猿创业开发实训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这种观察者方法,能够在这些方法中向事件总线发送事件。

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

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

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

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

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

银行账号:622202 0200 1078 56128 闫涛

我的支付宝:[email protected]

时间: 2024-08-07 16:30:02

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

最老程序员创业开发实训13---Android---网络请求与异步任务

在完成了用户注册和登录页面的界面设计工作之后,我们就需要让我们的程序向后台发起请求,请求后台PHP程序实际进行用户注册操作.在新版本的Android系统中,所有的网络请求必须以异步的方式来进行,我们既可以通过线程方式也可以通过Android系统为我们提供的异步任务方式来完成,我们在这里选择采用异步任务的方式来进行网络操作. 根据异步任务的原理,当应用调用异步任务时,异步任务会在后台完成相应的网络操作,在完成之后,在onPostExecute方法中通知界面,更新操作状态.有两种方法可以完成这项任务

最老程序员创业开发实训14---PHP---用户体系数据库设计

在做完了之前的一系列工作之后,终于要进行应用后台的设计和实现环节了.在后台设计中,我们觉得数据库的设计是最重要的根基,因为所有业务逻辑均是架构在数据库的基础之止,如果对数据库进行修改,程序可能需要大改,工作量将非常之大,所以数据库设计必须非常重视. 在谈数据库设计之前,我们先谈一下ORM,即关系数据库与面向对象系统的映射,其理由是面向对象开发人员,不了解关系型数据库,因些引入ORM,使其不需要学习关系型数据库就可以进行数据库开发.我们认为,关系型数据已经有了几十年的发展历史,理论和实践都很成熟,

最老程序员创业开发实训12---Android---在MVC架构下Activity设计及实现

在上一节中,我们讲述了如何在Android平台下,以MVC架构为指导,实现模型类的方法.在本节中,我们要重点讨论一下,怎样设计Activity类,作为MVC中的控制器,并在其中使用我们在上节所讲述的模型类.在这里我们只讨论重要的代码,对于资源文件及Activity页面设计及实现细节,由于篇幅所限,就只能略过了,大家可以在稍后公布的项目下载包中查看相应的代码. 我们以具体项目WkgJys项目为例,项目在首次运行时,Splash页面之后,会进入JysAppTourActivity,在看完所有介绍页面

最老程序员创业开发实训7---Cocoa Touch Framework实现Splash屏幕功能

在Xcode中建立好工程空间(Work Space)之后,并且建立Cocoa Touch Framework工程WkyLib和应用工程WkgJys工程,下面我们就可以开始进行正式开发了. 首先我们进入Cocoa Touch Framework工程WkyLib,先在下面创建如下组用于组织代码:common, model, view, controller,如下图所示: 同时,在WkyLib的目录下,创建相同的目录common, model, view, controller, images: 在v

最老程序员创业开发实训6---用Swift创建Framework工程重用代码

由于我们要开发一系列应用,很多基础功能是通用的,我们希望这些通用功能可以实现不同程序之间重用,在IOS开发中,可以通过静态库和Framework两种方式来实现,我们选择采用Framework方式,因为这种方式更加灵活.在本节中,我们将创建一个CocoaTouch Framework工程WkyLib,实现Splash屏幕功能,然后创建WkgJys应用,调用WkyLib中的Splash屏幕功能. 新建一个在文件=>新建中选择新建Workspace,如下图所示: 在Xcode中建立Cocoa Touc

最老程序员创业开发实训4---IOS平台下MVC架构

在前面几篇文章中,我们大致研究了一下,在Android平台,以应用开始时的Splash页面为例,讲述了怎样利用MVC架构来实现这一简单功能,有可能有朋友认为,对于这样简单的功能,采用MVC架构有些过了.但是,如果需求变为,需要根据时间.地点等,显示从服务器上下载的图片,那么我们所采用的架构,就具有一定的优势了. 下面,我们将讲述在IOS平台怎样实现相同的功能.我们知道在IOS平台上开发原生应用,有两种技术可供选择,即Objective-C或Swift.如果对于找工作而言,当前最好的选择依然是Ob

最老程序员创业开发实训2---采用MVC架构的应用Splash页面实现

在基本所有的应用中,一点应用图标,都会弹出一个Splash页面,显示几秒钟,然后再进入到程序的主页面中(如果是用户第一次使用,会进入一个新手引导系列页面,介绍产品的主要功能).今天我们就来开发这个页面. 这个页面是几乎所有应用都会用到的页面,所以我们希望在多个应用中重用,怎么来实现呢?在Android中,我们可以将这个页面做成一个工程项目,所有其他应用项目,都引用这个工程项目,就可以直接使用这个Splash页面的实现了. 我们先建立一个普通的Android工程(我们在调通这个功能之后,我们会将其

最老程序员创业开发实训3---采用MVC架构的应用Splash页面实现

在上篇文章中,我们已经将Splash页面显示封装到了WkyLib工程中,在本节中,我们将建立一个具体应用工程:维康基因基因师版(WkgJys),是一款面向基因师的工具软件,可以使基因师更好的管理客户,建立自己的个人品牌,向客户提供在线咨询.线下预约咨询等功能.这只是一款假想中的软件,我们不用太去考虑软件的商业价值,我们的重点是如体来实现这款软件. 建立WkgJys工程,首先我们设定这个工程需要依赖于我们上节所建立的库工程WkyLib,方法是选中WkgJys项目,按右键,选择项目属性=>Andro

最老程序员创业开发实训10---Android---注册登录功能实现1

用户在观看完应用介绍页面之后,会点击进入应用按钮,这时由于用户是第一次运行,所以会弹出注册页面.如果是老用户,启动应用时,在Splash页面之后,如果应用记录着用户的登录信息,测直接进入主页面,如果从本地取不到用户登录信息,则将显示登录页面. 注册和登录功能看起来很简单,但是由于我们这里需要实现一个完整的应用支撑基础设施,因此需要分几个部分来进行.我们首先会讨论怎样创建并使用Activity中会用到的Model类,在这中间我们会采用Application对象作为中心信息仓库,每个Model类只是