阅读(1703) (9)

ModPHP 中的 MVC

2017-06-13 16:55:47 更新

在 ModPHP 中,MVC 模式被定义成下面这样:

  1. 模型(Model) + 控制器(Controller) = 模块(Module)
  2. 视图(View)是完全独立的,和模型与控制器没有上下文关系。

模块是包含数据和操作数据的终端:

在 ModPHP 中,存储数据的模型(数据表)叫做模块数据表,操作数据的方法也就是控制器。模型与控制器之间的界限如此模糊的原因是因为:ModPHP 中,控制器基本上是自然存在的,它们是模块被添加到项目中开始,就自动继承于 Mod 核心类。例如 mod::add(),mod::update(),mod::delete(),mod::get() 等,它们是现成的操作和获取数据的基本方法,你不需要自己的去实现。例如用户(User)模块,只需要继承 Mod 类,不需要做其他什么,就可以通过 user::add() 添加用户,通过 user::update() 更新用户,通过 user::delete() 删除用户,以及通过 user::get() 获取用户。你不需要自己连接数据库,选择数据表,编写查询,这一切都是可以信手捏来的。

在 ModPHP 中,是强调前后端一致的,在后端中可以使用的方法,在前端依然可以随心所欲地进行访问。只需要通过程序入口文件 mod.php,它是一个访问控制器,无论是 PHP 引用,还是前端 URL 调用,只用访问 mod.php,就可以和模块进行沟通,调用模块的操作方法。例如下面的方法是等效的:

include 'mod.php';
$result = user::get(array('user_id'=>1));
print_r($result);

<script>
$.get('mod.php?user::get|user_id:1', function(result){
    console.log(result);
});
</script>

视图独立存在,多模板是默认实现的

在其他 PHP 框架中,视图一般都要对应某个控制器,并由控制器将其返回给浏览器。但 ModPHP 不这么做,这样对模板开发的限制太多,例如变量会被滥用,多模板也很难实现,即使实现也是很固定的,因为控制器的设计是固定的。在 ModPHP 中,视图和模型、控制器之间是没有上下文关系的,你可以在视图中尽情发挥,随意编写模板。ModPHP 使用自动生成模块函数的方式,让你随意调取某个模块的数据。实际上,在 ModPHP 模板中,函数是被建议使用的,因为它们功能强大,内部封装,不会造成变量滥用的问题。

ModPHP 包含的所有功能和特性,目的是使开发者更专注于界面的呈现,而不是把时间花费在思考如何部署和编写程序逻辑。