Android开发心得(一)
来源:互联网 发布:iphone健康刷步数软件 编辑:程序博客网 时间:2024/06/05 13:23
Android开发心得之MVC
这一个学期在上潘老师的系统设计与分析课程时,我们小组开发了基于安卓平台的电影购票软件。在开发过程中收获了挺多,现在在课程结束前,把其分享出来。
MVC是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。
1.什么是 MVC?
Model–view–controller (MVC) is a software architectural pattern for implementing user interfaces on computers. It divides a given application into three interconnected parts in order to separate internal representations of information from the ways that information is presented to and accepted from the user.[1][2] The MVC design pattern decouples these major components allowing for efficient code reuse and parallel development. 维基百科
简而言之就是将应用程序划分为三种组件,模型-视图-控制器(MVC)设计定义它们之间的相互作用。
- Model:用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。Model有对数据直接访问的权力,例如对数据库的访问。Model不依赖于View和Controller,也就是说,Model 不关心它会被如何显示或是如何被操作。但是 Model 中数据的变化一般会通过一种刷新机制被公布。为了实现这种机制,那些用于监视此 Model 的 View 必须事先在此 Model 上注册,从而,View 可以了解在数据 Model 上发生的改变。
- View:能够实现数据有目的的显示(理论上,这不是必需的)。在 View 中一般没有程序上的逻辑。为了实现 View 上的刷新功能,View 需要访问它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。
- Controller:起到不同层面间的组织作用,用于控制应用程序的流程。它处理事件并作出响应。“事件”包括用户的行为和数据 Model 上的改变。
2.我们为什么要使用MVC?
最重要的原因就是解耦
它将业务逻辑、数据、界面显示用分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。其中M层处理数据,业务逻辑等;V层处理界面的显示结果;C层起到桥梁的作用,来控制V层和M层通信以此来达到分离视图显示和业务逻辑层。
3.Android下的MVC
在我们的项目开发中,MVC在Android程序中是如下的应用、
- M层:做电影购票软件的业务逻辑操作,比如对电影院线的数据库的存取操作、网络访问操作。我们的项目中bean文件下存放着各种模型的业务逻辑的代码
-
- V层:应用层中处理数据显示的部分,在Android程序中XML布局可以视为V层,显示Model层的数据结果,即APP的各种界面布局文件。我们的项目中V层主要是在Android下的Layout文件夹下
-
- C层:在Android中,Activity用于处理用户交互问题,因此我们项目中认为Activity是控制器,Activity读取V视图层的数据,控制用户输入,并向Model发送数据请求(eg.发起网络请求等)。
4.对Android下MVC的再思考
MVC模型看似十分完美,然而却仍有缺陷。原因在于XML作为View层控制能力太弱了,如果我们想要动态的改变一个页面的背景或者动态的隐藏/显示一个按钮,这些都没有办法在XML中做,只能把代码写在activity中,这就造成了activity既是controller层,又是View层的一个现状。
此外,MVC还有一个重大缺陷,就是上图中的view层和model层相互可知,这意味着两层之间存在耦合,这对于一个大型程序而言是致命的。
由于MVC有着这样那样的缺点,因此有了MVP和MVVM这两种框架。
但是由于我们在项目开发中学习时间不够充裕,没有及时将下面两个框架应用到我们的项目中,所以在此不过多介绍。
- android开发心得(一)
- Android开发心得(一)
- IBatis开发心得(一)
- 软件开发心得(一)
- android TV盒子开发心得(一)
- Android入门心得(一)
- android开发心得(二)
- wml初学开发心得(一)
- MS系统开发心得(一)
- 插件式设计开发心得(一)
- ECShop原型开发(一)个人心得
- 软件开发项目管理心得(一)
- JNI开发心得笔记系列(一)
- 安卓View开发心得(一)
- SteamVR+Unreal4 VR开发心得(一)
- Tiny6410驱动开发心得(一)
- nanopi s2 驱动开发心得(一)
- android 蓝牙4.0开发心得(一)蓝牙搜索
- Kotlin安装配置与入门
- kali Linux安装完后输入用户名和密码不知道是什么
- IPtables 学习笔记一
- 关于C++中的mutable关键字的研究
- IPtables 学习笔记二
- Android开发心得(一)
- JAVA中的运算符的总结
- Target Sum
- IPtables 学习笔记三
- 程序猿的爱情,猿粪是一个奇妙的东西
- [bzoj4810][Ynoi2017]由乃的玉米田 bitset+莫队
- 图结构练习——BFS——从起始点到目标点的最短步数
- Xception —— 深度可分卷积
- j2ee的web项目,在浏览器中发起一个该项目中html页面的绝对地址,也是发起的一个http url请求,请求的响应报文的结果就是该html页面的所有html代码