🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
MVC的三要素 **Model**是指数据模型,是对客观事物的抽象。 **View**是指视图,也就是呈现给用户的一个界面,是model的具体表现形式,也是收集用户输入的地方。 **Contorller**指的是控制器,主要负责与model和view打交道。 关于View的几个原则: 1.负责显示界面,**以HTML为主**; 2.一般**没有复杂的判断语句或运算过程**,可以有简单的循环语句、格式化语句。 比如,一般博客首页的文章列表,就是一种循环结构; 3.**从不调用Model的写方法**。也就是说,View只从Model获取数据,而不直接改写Model,所以我们说他们老死不相往来。 4.一般**没有任何准备数据的代码**,如查询数据库、组合成一定格式的字符串等。 这些一般放在Controller里面,并以变量的形式传给视图。 也就是说,视图里面要用到的数据,都是拿来就能直接用的变量。 关于Model的几个原则: 1.数据、行为、方法是Model的主要内容; 2.实际工作中**,Model是MVC中代码量最大**,逻辑最复杂的地方,因为关于应用的大量的业务逻辑也要在这里面表示。 3.**Model所提供的数据都是原始数据**。也就是说,不带有任何表现层的代码。 比如,一般不会在输出的数据中添加HTML标签,这是View的工作。 但是Model可以提供有结构的数据,数组结构、队列结构、乃至其他Model等。 这个结构并非是表现层的格式,而是数据在内存中的表现。 4.**与输出不同,Model的输入数据,可以是带有表现格式的数据。** 如将一篇文章保存到Post里面,内容中必然包含各种HTML标签。 因此,Model一般要对输入数据作过滤、验证和规范化等预处理。 特别是对于需要保存进数据库的,一定要对所有的输入数据作预处理。 这些预处理,有的其实是业务逻辑。比如只有主编才可以删除文章,这一验证规则既也是业务逻辑,也是权限控制。 而有些预处理,则不属于业务逻辑,比如,文章标题前后的空格应去除。 5.注意与Controller区分开。Model是处理业务方面的逻辑,Controller只是简单的协调Model和View之间的关系, 只要是与业务有关的,就该放在Model里面。**好的设计,应当是胖Model,瘦Controller。** 关于Controller的设计原则: 1.**用于处理用户请求**。 因此,对于reqeust的访问代码应该放在Controller里面,比如 $_GET $_POST 等。 但仅限于获取用户请求数据,不应该对数据有任何操作或预处理,这些工作应该交由Models来完成。 2.**调用Models的读方法**,获取数据,直接传递给视图,供显示。 当涉及到多个Model时,有关的逻辑应当交给Model来完成。 3.**调用Models**的类方法,对Models进行写操作。 4.**调用视图渲染函数等**,形成对用户Reqeust的Response。 **Model设计参考** 1.Model应当集中整个应用的数据和业务逻辑 2.基础Model应当尽可能细化 3.分层次设计Model 4.仔细为Model方法命名 5.MVC与前后端的配合