5

前一阵子我问了here,因为我对这个话题很陌生,所以在理解MVC方面有所帮助。我认为自己对此有相当的理解,这在我最近撰写关于这个主题的blog post中有记录。我的理解基本上归结为:MVC:模型和实体对象是否将概念分开?

控制器:确定完成请求需要做什么,并根据需要利用需要收集/修改的任何模型。它基本上是一个给定过程的管理者。

观看次数:仅限演示。一旦控制器收集到需要的东西,它会创建一个特定类型的视图,将它传递给信息,并说“显示给用户,但是你这样做”。

Models:应用程序的行为。当控制器要求它提取或修改某些内容时,它知道如何去做。它也知道要触发其他模型来完成相关任务(在我的理解中,当一个模型试图在StackOverflow上“投票赞成”时,该模型知道要问是否也应该授予徽章,因为控制器没有需要关心)。

我的问题,假设所有这些都或多或少准确,是实体对象进来的地方?模型和实体是同一件事,每个对象知道如何保留自己的数据,或者实体是一个独立的概念,它们独立存在并在整个应用程序中使用?

我的钱在后者上,因为这将允许模型独立行事,而所有三层(模型,视图和控制器)都可以利用实体​​根据需要传递数据。而且,对象和数据库持久性看起来应该分开。

说实话,我对MVC的了解越多,我就越感到困惑。我准备好采用核心概念(单独的逻辑演示),并以任何正确的方式与它一起运行,而不必太担心“MVC”标签。

回答

0

每个模型可以是一个包含一些控制和使用其数据的方法的实体。
够了吗?

+0

对不起,但我不太清楚你在说什么。你能改述一下吗? – AgentConundrum 2010-09-29 07:56:24

+0

真的很抱歉因为我的英语...:P – 2010-09-29 07:57:50

+1

不用担心。那么,你是说模型和实体是一回事?我对此感到有点惊讶,因为(正如我在我的问题中所说),似乎实体本身不应该担心自己的持久性。 – AgentConundrum 2010-09-29 08:06:56

5

是的!

我的钱是后者,因为这将让模型独立行事

你不想你的看法绑定到一个实体,因为如果认为还需要一些其他的一块数据,你将不得不将它交给你的实体。该模型完全支持该观点,并关注支持该观点,而不是其他观点。

例如,您显示实体列表,您可能需要哪些其他数据?当前页码?总页数?要显示的自定义消息?

这就是为什么你应该绑定到一个模型,你可以随意添加数据项目,因为你需要。

更新

这里是MVC的行动作出解释......

控制器得到所有的请求所需的数据,并把它放入模型。然后它将模型传递给视图。

该视图然后处理模型中数据的布局。

+0

我在想,一个控制器会根据需要调用尽可能多的模型来获得所需的模型,并且这些模型会生成要传回给控制器的实体。当控制器收集到需要的东西时,它会传递模型给出的实体集合,并且视图使用这些实体生成其输出。即控制器询问模型的问题,谁给了控制器一个问题实体,谁发送实体来查看,其中有像'<?php echo $ question-> getQuestionTitle?>'即实体是源的意见数据。这是正确的吗? – AgentConundrum 2010-09-29 07:55:22

+0

我会重新解释你刚才对这个答案的更新所说的话。 – Fenton 2010-09-30 08:29:31