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

    上一篇: MVC: I need to understand the Model

    下一篇: Serialize List<T> containing List<T>