MVC模式
http://chin.blogchina.com/blog/article_22.755550.html
M,Module,模块
主要是操作数据库的部分,包括Insert Update Delete Select
全部由RDBMS完成,写成Store Procedure放在DBMS上,所有的数据库操作均在这里完成C,Control,控制
主要是用户交互和SP调用,包括客户端提交数据的验证,逻辑流程控制,要操作数据库的时候就调用SP来完成V,View,视图
主要是用户界面,包括界面生成和用户输入界面提供
下面我以用户登录说明这个过程首先,用户看到登录的表单,填写用户名和密码,选择是否要保存Cookie,这部分是由HTML完成的,属于View的范畴。然后,用户点击提交,PHP作为表单的Action处理用户的数据,看是否填写了,看填写的数据是否合乎规范(比如我们的用户名实际上就是Mail地址,就像MSN),如果不合法,返回,要求用户重新填写,如果合法,请求服务器端的spValidateUser这个存储过程验证用户名密码是否匹配。这些工作都是PHP完成的,属于Control的范畴。服务器端的SP接受到PHP的执行请求,接收PHP验证过后的用户名和密码,去数据库中查询,如存在相应记录,返回这条记录(我只返回一个用户ID),如不存在,返回空记录,表示登录失败。这些工作都是DBMS完成的,属于Module的范畴。如此一来,分工就非常明确了,Store Procedure只负责操作数据库,不负责数据合法性检查,如果数据不合法(比如少了一个参数之类的),拒绝执行。PHP部分只负责数据合法性检查和 SP调用,至于去哪个表查,返回什么东西,它都不管,它甚至不知道存放数据的表的名字。HTML只负责显示,至于显示什么信息,"错误报告"还是"操作成功",这个由PHP确定。在我的PHP脚本里面,没有一个数据表的名字,也没有Insert Update Delete Select,这些都在存储过程里面。在我的HTML模板中,几乎没有if else的逻辑(提交表单的时候,Javascript要验证一遍表单,这是为了加快速度和方便用户操作)。在我的存储过程里面,没有
if xxxx is null….print "Error"的逻辑这样做的好处是,修改出错信息的颜色可以直接用Dreamweaver,调整PHP的逻辑可以直接用Editplus,测试SQL脚本则直接在查询分析器里面调用一遍(不需要PHP来拼接SQL语句啦)。
