理解MVC中的模型。

时间:2015-10-08 08:44:35

标签: model-view-controller

我已经和OOP合作了一段时间了,并养成了为人物,帐户等创建课程的习惯。我用Java编写了这个。

最近我开始使用MVC(在PHP中),我已经意识到,与我原先的想法相反,该模型不像OOP课程 - 如果我&#,请随时纠正我39;我错了,但我的理解是模型只是控制器和数据库之间的接口(可能有数据处理 - 下面有更多内容)。我之所以这么想是因为我最近搞乱了PHP的CodeIgniter框架。 CI不允许模型实例。相反,它是一个单例模式,在我看过的大多数教程中,它只用于数据库查询,有时也用于静态方法。

现在,来自OOP,我已经习惯了拥有存储数据并能够操作的类(OOP类)。我的问题是,在MVC中,我不确定这发生在哪里,如果是的话(我最初认为' class'是' model'的同义词)。所以,我想我正在寻找的是向我解释的人:

  1. 数据操作(业务逻辑)在哪里发生?我已经阅读了很多文章和帖子,似乎有些人更喜欢在控制器和模型中的其他人中进行。在MVC方面,其中一个比另一个更正确吗?

  2. 我在哪里/如何存储数据以便在我的应用程序中使用,例如数据库中的数据或API调用返回的JSON / XML文件?我说的话通常是OOP类中的属性。这是否仍然发生,或者是直接从数据库到视图而不是存储在类中的变量中?

  3. 如果您可以将我链接到任何可以帮助我更好地理解这一点的指南/网站,我将不胜感激。

2 个答案:

答案 0 :(得分:0)

以类的形式表示MVC,你可以说: 模型 - 存储/提供数据的类。 视图 - 提供以特定方式显示提供的数据的功能的类。 控制器 - 控制数据如何被操纵和传递的类。

采用MVC设计,提供便于更换任何模块(模型/视图/控制器)的设施,而不会影响另一个模块。在大多数情况下,视图会被更改(例如以图形,聊天形式表示的相同数据),但其他模块也必须独立于其他模块。

答案 1 :(得分:0)

这是一个有趣的问题,而且你经常会听到相反的事情,关于如何清洁和剥离模型应该与他们实际做你认为应该做的一切。如果我是你,我会看看数据映射器。很多人比我在这个问题上写的要聪明得多,所以请做一些研究,但我会看看能不能总结一下。

这个想法是你将模型的概念分成两个部分。第一个是标准模型。这个简单的财产包。它所做的只是拥有一个通常反映您的数据库数据的状态,或者一旦保存数据库数据,或者您使用它的状态。

第二个是数据映射器。这是你放重物的地方。它的工作就是在你的纯模型和数据库之间提供一个层,就是这样。它与数据库进行通信,检索特定于模型的数据,并将其映射到模型。或者它读取模型,并将该数据写入数据库。或者它将模型的数据与数据库的数据进行比较。

这样做是因为它允许每一层只关注一件事。模型只需保持状态,并了解其状态。或者具有与不涉及数据库或存储的模型相关的一些功能。现在模型不再关心与数据库交谈了,这是一个巨大的自由!现在,如果您切换到不同的数据库,或者切换到cookie或将文件存储在文件或缓存中或任何其他形式的持久性中,您永远不需要更改模型。您需要更改的是在模型和数据库之间进行通信的映射层。