ITPub博客

首页 > 移动开发 > ANDROID > 深入浅出——MVC

深入浅出——MVC

原创 ANDROID 作者:山有木xi 时间:2020-05-26 10:27:27 0 删除 编辑

    MVC,MVP,MVVM,这些都是耳熟能详的,而我之前的一篇文章其实也写过这三个框架,并且为它们分别画了图解释,相信疑惑的人看完以后对这三个框架一定有种豁然开朗的感觉。

    其实本来是不打算再写关于MVC的文章,但是后来发现,有一些更深的理解和逻辑。单纯依靠图片的解释,或许只能达到堪堪入门的境界,想了很久还是决定,单独开一篇MVC的文章,让我们深入浅出一下MVC的机制和原理。

  • MVC,即Model、View、Contoller,也就是模型、视图、控制器。

       不知道大家是否有种习惯,喜欢把业务逻辑放在 Contoller中,将数据库访问操作放在Model中。乍看起来,好像并没有问题,软件也可以完好的写出来,但是其实这种写法并不能被称为MVC,而是另外一种也很出名很重要的架构,DAO三层架构。

    在DAO三层架构中,分为UI界面层,业务逻辑层,数据访问层,曾经它也是红极一时的架构,只是在MVC出来之后销声匿迹了,但其实现在看来,许多人还是习惯于DAO三层架构,只是套了个MVC的名字而已。而MVC最重要的代码可扩展性、可复用性、可维护性在这其中就得到了削弱。

    想要深入理解MVC,其实离不开Android的兄弟Javaweb。学习过JSP的人应该都有或者曾经有过一个疑惑:JSP和Servlet到底是什么关系,这里只做简单表述。

  • Servlet在Java代码中通过Http ServletReponse对象动态输出HTML内容,能够很好地组织业务逻辑代码。但是在Java源文件中通过字符串拼接生产动态HTML会导致代码的可读性较差,维护起来比较困难

  • JSP在静态HTML中嵌入Java代码,Java代码会被动态执行后生产HTML内容,JSP其实是避开了 Servlet在生成HTML内容的缺点,但是在HTML中混入大量复杂的业务逻辑就是他的劣势了

    而这个时候MVC框架就发挥了重要的作用,它能够使 Servlet和JSP扬长避短,发挥各自的优势。

在MVC模式中:

  • Contoller(控制器),负责转发请求,对请求进行处理。web浏览器发送HTTP请求到服务端,被 Contoller(也就是Servlet)获取并处理(参数解析、请求转发等)

  • Contoller(也就是Servlet)调用核心业务逻辑——model,获取结果

  • Contoller(也及时Servlet)将逻辑处理结果交给View(也就是JSP),动态输出HTML内容

    看到这里是不是就很清晰了,这就是MVC的作用

    而Android,自然也可以使用MVC框架,MVC的设计模式表面,应用的任何对象,归根结底都属于模型对象、视图对象以及控制器对象中的一种。让我们来看看Android中的MVC

  • 模型对象(Model),存储着应用的数据和业务逻辑。模型类通常用来映射与应用相关的一些事物,例如:用户、商店里的商品、服务器上的图片。模型对象不关心用户界面,为储存和管理应用数据而生

  • 视图对象(View),知道如何在屏幕上绘制自己,以及如何响应用户的输入,例如:触摸动作,点击动作等等。凡是能在屏幕上看到的都是视图对象

  • 控制器对象(Controller),含有应用的逻辑单元,是视图对象与模型对象的联系纽带。控制器对象响应视图对象出发的各类事件,还管理者视图对象和模型对象的数据交互。在Android中控制器一般是由Activity、Fragment或者Service的子类担当

    众所周知,GoF总结过23种设计模式,这23个设计模式是某小姐特定的编程问题的良药。MVC也可以说是一种模式,区别于这23种模式之外的模式。当然,确切的说,MVC应该是多种设计模式的组合,所运用到的其实还是那23中之三。

    组合模式:只在视图层(View)活动,视图层的实现用的就是组合模式。组合模式的类层次结构是树状的,而不论是web还是Android其实也都是树状结构组织界面控制对象的,只不过浏览器等厂商帮我们把界面相关的部分做完了,所以我们感觉不到而已,但是它确实是MVC应用中的一部分。

    观察模式:被分为两个部分,被观察的对象,和观察者。其实这样说,或许有点蒙,可以这样理解,观察模式其实就是监听模式。在MVC中,Model是被观察的对象,View是观察者。一旦Model发生改变,View就会被通知更新。在web中因为隔了一个HTTP,所以不能显示的进行关联,而他们的关系就变成了View接受用户的数据通过HTTP发送给了服务器,服务器上的Model接收数据进行某些操作,在通过HTTP发送给View,View再更新界面。

    策略模式:其实是View和Controller之间的关系, Controller是View的一个策略, Controller对于View是可替换的,View对 Controller是一对多的关系,基础会有一个View被多个 Controller引用。

    MVC是个很有意思的东西,他对于编程时的灵活性,复用性,扩展性都有好处,真正写出MVC框架的软件程序,对于软件工程师来说不论是现在还是未来都是很有好处的一件事情

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69917874/viewspace-2694325/,如需转载,请注明出处,否则将追究法律责任。

全部评论
Oracle OCA(Java),IBM高级工程师认证,中国软件行业人才(高级c语言),高级Android工程师,对数据库并发与性能调优也有一定了解

注册时间:2019-04-25

  • 博文量
    83
  • 访问量
    235578