深入理解MVC
首先我们来看看MVC架构的示意图:
和访问者交互的是控制层(Controller层),控制器(controller)是同类交互的集合,每一个交互的操作,都对应了一个动作(action)。在Thinkphp框架中,全部的控制器类都必须继承于Action。
对数据库进行存取的是模型层(Model层),在Thinkphp框架中,全部的模型器类都必须继承于Model。
显示页面模板的是视图层(View层)。
上面简单描述了MVC架构的理解。
MVC理念是将网络系统划分为三个关注点:交互、数据、页面模板;也就是我们设计或分析一个网络系统,就可以从这三个角度去进行:
交互:
表现在系统提供了哪些功能,这些功能可以划分为哪些大类,每一个大类的功能分别都有些什么操作等等。
比如PHP论坛系统,我们可以粗略划分成板块、帖子、用户、站内信息、后台管理等几大类的功能,然后用户的功能里面又包括了注册、登录、修改用户信息等等的多个操作。
对应Thinkphp框架的控制层(controller层)而言,一个功能大类可以说是一个控制器类(当然,如果该类型概况的范围比较大,那么还需要继续拆分成多个控制器类),单个类型内的每一个功能就是一个动作(action,控制器类的方法函数)。
数据:
表现在系统对数据库进行了那些操作。网络系统几乎都需要和数据库打交道。那么,在进行对交互的分析和对系统本身的分析后,我们也大致上可以归纳系统需要哪些数据了。然后我们将这些数据整理归类,最终可以得出系统需要的数据表是哪些。
就刚才的PHP论坛,按照“板块、帖子、用户、站内信息、后台管理”这五个分类功能,我们可以基本归纳出它们需要:板块记录表、帖子记录表、用户表、站内信息表、后台设置表等等。
对模型层(Model层)而言,一个表可以说就是对应了一个模型类。而模型父类(Model)为这些模型类提供大部分与数据库存取的功能。
页面模板:
每一个网络系统的开发中,我们都将需要制作相当数量的页面。简单来说,控制器的每一个动作(action)都有可能产生一个页面,所以在理清所有交互,完成控制器的设计后(未写代码前),我们就可以得到需要的页面模板的清单了。然后在模板引擎的帮助下,页面模板的制作可以与控制器的开发同时进行,以提高开发效率。
按照上面的PHP论坛交互的设计,那么我们可以得到的页面模板有许多,比如板块方面,有首页模板、分区模板、板块模板等;帖子方面有帖子内容模板、发帖模板、回帖模板等。
根据“交互、数据、页面模板”这三个关注点,那么我们就可以比较全面地去分析和设计一个网络系统了。请注意这三个关注点并非孤立的,而“交互”正是“数据”与“页面模板”的基础,所以对“交互”的分析务必要做到正确并且完善。
深入理解MVC的更多相关文章
- 通过Ruby On Rails 框架来更好的理解MVC框架
通过Ruby On Rails 框架来更好的理解MVC框架 1.背景 因为我在学习软件工程课程的时候,对于 MVC 框架理解不太深入,只是在理论层面上掌握,但是不知道如何在开发中使用 MVC ...
- 深入理解MVC与MVP
http://www.cnblogs.com/seaky/archive/2011/04/06/1982533.html 在深入分析MVC和MVP之前,我们有必要回顾下经典的三层架构.分层是计算机学科 ...
- 你是怎么理解“MVC”的
MVC就是三个字母的组合,M-模型, V-视图, C-控制器. 这些在百度上随便一索就可以索到,而且网上对这三个部分的解释又过于笼统,使人没法完全理解MVC的含义. 这里我简单的谈谈我对MVC这三 ...
- <转>ASP.NET学习笔记之理解MVC底层运行机制
ASP.NET MVC架构与实战系列之一:理解MVC底层运行机制 今天,我将开启一个崭新的话题:ASP.NET MVC框架的探讨.首先,我们回顾一下ASP.NET Web Form技术与ASP.NET ...
- ASP.NET MVC 理解MVC模式
ASP.NET MVC 理解MVC模式 PS:MVC出来很久了,工作上一直没机会用,所以我也没去学.出于兴趣,工作之余我将展开对MVC的深入学习,通过博文来记录所学所得,并希望能得到各位园友的斧正. ...
- 其实想要完全理解MVC框架并不是太容易
完全理解MVC并不是很容易.使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考.同时由于模型和视图要严格的分离,这样也给调试应用程序带来了一定的困难.每个构件在使用之前都需 ...
- SpringMVC:学习笔记(1)——理解MVC及快速入门
SprigMVC-理解MVC及快速入门 说明: 传统MVC-->JSPModel2-->Front Controller + Application Controller + Page C ...
- 更加清楚理解mvc结构
更加清楚理解mvc结构 文章来源:刘俊涛的博客 地址:http://www.cnblogs.com/lovebing 欢迎关注,有问题一起学习欢迎留言.评论.
- [概念理解] MVC模式和C++的实现
[转]学习可以是一件很快乐的事,特别是当你发现以前所学的点点滴滴慢慢地能够串起来或者变成了一个环,这种感觉真好.这篇文章就这么来的. 从MVC架构开始说起吧.这两天系统了解了一下MVC架构的内容,主要 ...
- 深入理解MVC C#+HtmlAgilityPack+Dapper走一波爬虫 StackExchange.Redis 二次封装 C# WPF 用MediaElement控件实现视频循环播放 net 异步与同步
深入理解MVC MVC无人不知,可很多程序员对MVC的概念的理解似乎有误,换言之他们一直在错用MVC,尽管即使如此软件也能被写出来,然而软件内部代码的组织方式却是不科学的,这会影响到软件的可维护性 ...
随机推荐
- C++ protected访问权限思考
看了云风关于protected的思考,自己也总结了下. C++的访问权限有三个 private.protected.public. 如果不包括继承的话,比较好理解,可以分为类外和类内两部分.类外不能访 ...
- 3097: Hash Killer I
3097: Hash Killer I Time Limit: 5 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 425 Solved: 15 ...
- 1179: [Apio2009]Atm
1179: [Apio2009]Atm Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1629 Solved: 615[Submit][Status ...
- 深入理解 JavaScript 异步系列(5)—— async await
第一部分,ES7 中引入 async-await 原文地址 http://www.cnblogs.com/wangfupeng1988/p/6532734.html 未经作者允许,不得转载~ 前面介绍 ...
- 消息队列-ActiveMQ
1 业务需求描述 举例描述: 再警情通报的业务时通过发送消息界面可以选择 警情联络,和船情通报两种消息 发送方式可分为 一对一发送:部门对部门.个人对个人 一对多发送:部门对多部门.个人对多人 2 功 ...
- gitignore文件中添加新过滤文件,但是此文件已经提交,如何解决?
gitignore文件中添加新过滤文件,但是此文件已经提交到远程库,如何解决? 第一步,为避免冲突需要先同步下远程仓库 git pull 第二步,在本地项目目录下删除缓存 git rm -r --ca ...
- Spring Data JPA 实例查询
一.相关接口方法 在继承JpaRepository接口后,自动拥有了按"实例"进行查询的诸多方法.这些方法主要在两个接口中定义,一是QueryByExampleExecut ...
- JAVA基础知识(2)--关键字static的使用
在Java类中声明属性.方法和内部类时,可使用关键字static作为修饰符,static标记的属性和方法可以由整个类进行共享,因此static修饰的属性称为类成员或者称为类方法:static修饰的方法 ...
- [UWP]了解模板化控件(1):基础知识
1.概述 UWP允许开发者通过两种方式创建自定义的控件:UserControl和TemplatedControl(模板化控件).这个主题主要讲述如何创建和理解模板化控件,目标是能理解模板化控件常见的知 ...
- 一些关于Canny边缘检测算法的改进
传统的Canny边缘检测算法是一种有效而又相对简单的算法,可以得到很好的结果(可以参考上一篇Canny边缘检测算法的实现).但是Canny算法本身也有一些缺陷,可以有改进的地方. 1. Canny边缘 ...