用MVC模型引导你的WEB设计思路

作者的blog:http://blog.csdn.net/oyiboy

习惯于过程式的开发,一直向往着面向对象。无奈半路出家人,没有一点内力基础,看了一大堆面向对象的书也只是看得一头雾水。对于MVC的概念也是偶然了解到的,感觉能和WEB开发结合起来让项目面向对象化。以下是我一点点心得。
先介绍一下MVC的概念:
MVC(Model-View-Controller),即把一个应用的输入、输出、处理流程按照Model、View、Controller的方式进行分离,这样一个应用被分成三个层——模型层、视图层、控制层。
 模型(Model):就是业务流程/状态的处理以及业务规则的制定。即是MVC的主要核心。
 视图(View):代表用户交互界面,也就是Web的HTML界面。
 控制(Controller):可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户的请求。

以下以一个简单的留言板作为分析例子。

1)从上面的概念来看,留言板可以切成三部份。
 模型(M):包含 数据库链接、生成数据集、数据库更新操作。
 视图(V):包含 获取模型的数据集,将数据集内填充到各种显示界面内,如(留言板列表,管理控制页面,添加修改删除界面等一切用户看得到的页面。)
 控制(C):包含 数据库更新的数据校验,将更新完毕后的结果转交给视图进行呈现。

2)三部份已经出来,下面是更进一步的细化。
 模型(M)
  数据链接:数据链接参数、链接失败处理。
  数据操作:生成固定格式的数据集、运行单行SQL、解析固定格式的数据集更新数据库(内容包括有:留言记录,管理员帐号,系统设定)。
  文件操作:将文件内部格式封成数据集,并附带读取写入文件操作。(内容包括有:留言板样式设定、版权设定、搜索引擎关键字设定、留言板标题设定)
 视图(V)
    数据显示:根据要求授权给控制器[C]向模型[M]请求数据集,然后根据数据集显示出界面。
    操作结果显示:根据控制返回的数据资料决定显示的提示资料
    具体资料包括有:
      留言添加页:判断留言者是否管理员、判断本次留言是回复还是新建留言。
      留言管理页:批量删除留言、查询留言、管理员帐号管理、系统设定等。
      留言显示页:判断留言是否为管理员专用、判断本留言是否为管理员发布、是否允许回复、是否显示留言者的敏感资料、留言是否需要审核后再显示。

 控制(C)
  数据/文件操作:接收操作资料,校验数据是否符合条件,引用模型的生成数据集类生成指定数据集,然后交给相应的模型操作方法操作,并获取操作结果以预定好的格式转交给视图处理

3)系统基本上细化完毕,下一步就是将以上分析出来的东西封装成Class
  模型(M):
    数据库链接和数据操作可以封成一个Class。
    数据库数据集的结构,可以引用Dictionary控件与数组完成。其间操作也可以封成一个Class具体可以仿造ASP.net中Dataset对象的部份机构。
    文件操作部份封装成一个Class
    文件结构定义可以封成一个Class以方便控制直接引用,然后转交给文件操作Class进行相应的操作。
  视图(V):
    视图部可均是以文件模式出现,也可以将部份代码封装后引用。也可以引用现有的模板类实现代码分离等。
  控制(C):
    数据校验:SQL注入防御处理、日文字符替换处理、特定常用校验正则式,这个是控制器常用的函数,可以封成Class也可以以函数型式存在独立文件,使用时直接引用。
    数据/文件更新操作:由于直接操作,可以避免使用Class,而是以文件模式出现,每个文件处理模型(M)中的某个类。并完成控制(C)的工作。
    视图[V]模型[C]链接器:接收视图[V]要求数据集的请求,将请求转换成模型[M]合适的SQL句,然后交给模型[M]数据集成生器生成数据集,然后返回给视图[V],这个处理比较麻烦,如果没必要作得太严谨的话可以直接使用字段名,并在视图[V]以SQL标准的条件句进向模型[M]请求数据。

 疑:
  视图[V]模型[C]链接器,对这个的设定我还是有点迟疑的。因为在MVC中,V对M的请求中是不需要C的掺和的,但是,这个链接器的操作确实很符合C的概念,所以这里我把它放在了控制器[C]里。或许他可以放至在视图[V]内。毕竟这个是视图[V]的事。这个就看每个人对MVC的理解了。

以上基本完成了留言板的结构分析与类的抽象,有不少的地方比较繁琐,甚至是啰嗦,一个留言板其实是没必要这样,不过,这个例子里作出来的不少Class可以直接使用在其它更大的项目中去,比如控制器[C]中的数据集请求转换器,校验部份、模型[M]中的数据库链接等,之所以遵循MVC模型进行编程不但是为了让程序设计更灵活,最重要一点是可以很快将项目拆开成一小块一小块,然后又将这些小块再折成更小的块,一直折到单个类的某个方法某个属性,等你完成这些小块代码后,那系统也就完成了。

(0)

相关推荐

  • 用MVC模型引导你的WEB设计思路

    作者的blog:http://blog.csdn.net/oyiboy 习惯于过程式的开发,一直向往着面向对象.无奈半路出家人,没有一点内力基础,看了一大堆面向对象的书也只是看得一头雾水.对于MVC的概念也是偶然了解到的,感觉能和WEB开发结合起来让项目面向对象化.以下是我一点点心得.先介绍一下MVC的概念:MVC(Model-View-Controller),即把一个应用的输入.输出.处理流程按照Model.View.Controller的方式进行分离,这样一个应用被分成三个层--模型层.视图

  • ASP.NET没有魔法_ASP.NET MVC 模型验证方法

    在前面的文章中介绍了用户的注册及登录功能,在注册用户时可以通过代码的形式限制用户名及密码的格式,如果不符合要求那么就无法完成操作,如下图: 该功能的原理是Identity基于的Entity Framework组件在添加用户之前对用户提交数据进行校验后给出的错误信息. 数据校验功能在每一个软件系统中都是非常必要的,为了避免用户输入无效或非法数据导致的系统错误,需要在数据进行处理或持久化之前对其进行验证确保数据的正确.有效性. 本文将从以下几点来介绍ASP.NET MVC中的模型验证机制: ● 输入

  • Web 设计与开发者必须知道的 15 个站点

    ColorCombos 配色是 Web 设计的首要大事,Color Combos 帮你预备了数千种配色方案,可以根据色调浏览选取.LIpsum Lorem Ipsum Text 是一中自造的,字典中不存在的单词,是在演示页面结构的时候,需要加文字的地方使用 Lorem Ipsum Text 填充可以避免用户因关注文字的意思而分神.Lipsum.com 可以帮你生成制定数目的 Lorem Ipsum 单词.What the font? 有时候你对某个 Logo 感兴趣,想知道是拿什么字体做的,可以

  • 网上考试设计思路是怎样的?

    global.asa < script LANGUAGE=VBScript RUNAT=Server > Sub Application_OnStart dbPath = "DBQ=" & Server.Mappath("onlinetest.mdb") dbConnectionString =  "DRIVER={Microsoft Access Driver (*.mdb)}; " & dbPath Set App

  • flask route对协议作用及设计思路

    目录 引言 flask route 设计思路 源码版本说明 flask route示例 flask route的作用 flask route的实现思路 werkzeug库中的Map与Rule在Flask中的应用 route的完整流程 总结 引言 本文主要梳理了flask源码中route的设计思路. 首先,从WSGI协议的角度介绍flask route的作用: 其次,详细讲解如何借助werkzeug库的Map.Rule实现route: 最后,梳理了一次完整的http请求中route的完整流程. f

  • Flex实现双轴组合图的设计思路及代码

    1.设计思路 (1)设计一个组合图,该图共用一个数据源 (2)组合图是有柱状图和折线图组合的 (3)柱状图显示的数据是依据左边的竖直轴,折线图的数据依据右边的竖直轴 2.源码如下 DoubleY.mxml: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:

  • 使用JavaScript实现网页版Pongo设计思路及源代码分享

    1.游戏背景介绍(写在前面的废话): 五月初的某天,看到某网推荐了这款游戏,Pongo,看着还不错的样子就用ipad下下来试玩了下,玩了两局感觉还错挺过瘾的,因为是手欠类游戏嘛大家懂的. 但是没一会发现游戏在ipad似乎有些bug,玩一会就会卡住然后只能强退了,真是揪心,记录还等着破呢. 怎么办?玩游戏不如玩自己的游戏的念头又邪恶的出现了,然后就把pad丢给了朋友虐心去,我默默回到电脑前开始动手自己写个不会卡的. 大概两小时吧,写出了基本框架,然后扔sinaapp里试了下效果基本能玩就洗洗睡了.

  • MySQL备份恢复设计思路

    背景 首先交代一下背景,由于某些因素的限制,我们公司目前的备份策略采用的是隔天全备的方案,增量备份则使用的是binlog server的方式,那么如何快速恢复就成为了我们需要思考的问题 恢复需求 根据我以往的一些经验来说,通常需要从备份恢复数据的场景有如下几种: 1.被误删库了 2.被误删表了,类型为TRUNCATE或者DROP 3.被误删列了,类型为ALTER ... DROP COLUMN 4.被误删数据了,类型为DELETE或者UPDATE或者REPLACE 5.表空间损坏或出现坏块了 根

  • Docker容器定时备份数据库并发送到指定邮箱(设计思路)

    目录 一.背景: 二.设计思路: 三.编写启动脚本 四.构建镜像 五.添加边车容器 5.1 创建配置文件 5.2 创建有状态服务部署文件 六.测试 项目地址及使用说明:https://gitee.com/noovertime/mysqlmail 一.背景: 一开始的初衷是,想写一个脚本来监控服务器的高占用率进程并通过邮件发送给我,然后突发奇想,可以使用这种方式来备份我的数据库,开始动手! 二.设计思路: 通过编写shell脚本,调用linux的mail工具,mysqldump的方式来保存数据库的

  • 基于SpringBoot实现自动装配返回属性的设计思路

    目录 一:需求背景 二:设计思路 三:使用方法 四:注解解析器(核心代码) 五:需要思考的技术点 一:需求背景 在业务开发中经常会有这个一个场景,A(业务表)表中会记录数据的创建人,通常我们会用userId字段记录该数据的创建者,但数据的使用方会要求展示该数据的创建者姓名,故我们会关联用户表拿该用户的姓名.还有一些枚举值的含义也要展示给前端.导致原本一个单表的sql就要写成多表的关联sql,以及枚举含义的转换很是恶心. 例如:业务对象BusinessEntity.java public clas

随机推荐