MVC:我需要了解模型
我一直在使用MVC模式一段时间,但我真的不觉得我真的懂得如何使用和应用“模型”......我的意思是,人们可以轻松地只使用控制器和视图,并没有问题。
我理解模型的概念,但我觉得在模式中应用它并不舒服......我在.NET中使用了MVC模式,在ColdFusion中使用了Wheels。
“该模型代表了应用程序的信息(数据)和用于操纵数据的业务规则” - 是的,我明白了......但我真的不明白如何应用它。 将呼叫路由到Controller并让Controller调用数据库,组织数据并将其提供给View更容易。 我希望有人了解我的困惑在哪里......
我很感激你的帮助!
看看这样。 当你的客户请求一个页面时,会发生什么(大量修剪):
他结束了你的控制器
控制器从您的模型中获取必要的数据
然后控制器将数据传递给将创建HTML的视图
控制器将HTML发送回客户端
所以客户端 - >控制器 - >模型 - >控制器 - >视图 - >控制器 - >客户端
那么模型是什么? 这是获取您查看所需数据所需的一切!
这是服务
这是数据访问
这是查询
这是对象映射
这是“抛出异常”风格验证的关键
如果你坚持这种模式,你的控制器不应该写你的查询。 您的控制器应该获取正确的数据以呈现正确的视图 。
您的控制器可以做一些其他的事情,例如验证发布的数据或某些if / else逻辑,但不查询数据 - 仅仅调用服务(在您的模型区域)以获取视图所需的数据。
我想这正是你决定在应用程序中调用不同的位。 无论您使用何种类别将信息从Controller传递给View,都可以被视为/称为“The Model”。
通常,我们称Model
实体类,并且我们称View Model
为“帮助器”类,因为没有更好的词,我们在“纯”实体(即存储在数据库中的实体)不足以使用时在视图中显示我们需要的所有信息,但它主要是一个命名的事情。
你的模型类不应该有任何功能; 理想情况下,模型类将只有属性。 您应该将模型类看作数据容器,信息转运者。 除此之外,它们(主要)是“哑”的对象:
// This would be a model class representing a User
public class User
{
public int ID { get; set; }
public string Name { get; set; }
public string Email { get; set; }
}
您如何将您的控制器中的信息(无论您的上下文中可能意味着什么)实际传递给View,反之亦然? 那么,那是你的模型。 :)
模型是基础对象的代码表示。 尽管MVC模型的一些数据密集型系统可能较少,但我相信您始终会找到适用的使用方式。
让我们以一个人为的(但是现实的)例子来说明模型的有用性:
说我正在创建一个博客。 我的博客有Post对象。 现在,帖子被用于网站内部和周围,并被系统中的许多用户添加。 我们的系统被编码为让人们在他们的帖子中输入HTML,但看不到,人们开始添加粘贴文本。 本文使用“ n”作为换行符。
使用模型,这是一个相对简单的修复。 我们只需制作一个覆盖postText的getter即可:
public function get postText() {
return this.postText.replace("n", "<br />");
}
突然间,我们可以用几行简单的代码来影响整个网站的行为。 如果没有模型的实现,我们需要在使用postText的地方找到并添加类似的功能。
MVC中的Model完全是关于代码库的封装和灵活性,随着时间的推移而变化。 你越用这种方式工作,并以这种方式思考它,你会发现越多的其他案例,否则将是一场噩梦。
- EDIT(你在上面添加了你的问题):
让我们看看这个例子,并使用Controller调用数据库。 我们有9个控制器类用于使用Post对象的各种页面/系统。 这是决定我们的邮政表现在需要有一个delete_fl
。 我们不再想要使用delete_fl = 1
加载帖子。
通过我们的Post模型的正确实施,我们只需编辑loadPosts()
方法,而不是搜索整个网站的所有案例。
一个重要的实现是,在任何主流系统中,模型都是一个文件集合而不是单个巨集。 通常,您将拥有每个数据库表的Model文件。 用户,发布等
链接地址: http://www.djcxy.com/p/52923.html