为我的应用程序构建MVC的正确方法

时间:2010-08-18 17:23:40

标签: mysql database model-view-controller cakephp

我正在抓取数据,我想抓三个搜索引擎。在My queries_controller中,我将有一个调用$this->Query->find('$query')的函数搜索。我的模型将把它交给我自己的数据库,其read()函数将调用三个函数,searchGoogle($query)searchYahoo($query)searchBing($query)。返回值将由数据库中定义的一些辅助函数标准化,然后添加到read()返回的数组中。我的模型将简单地将此信息传递给控制器​​,控制器将在视图中显示它。同时,控制器会将我的查询的所有结果写入MySQL数据库,并使用一个额外的模型,它将调用write()函数。

所有功能都在数据库中还是数据库返回粗略内容并将其留给模型进行标准化是正确的吗? Woud我的模型有另一个模型写入数据库或者它是控制器?我会在数据库中有帮助程序来执行标准化吗?是否有类似函数的扩展,所以它们都有相同的返回数组?我可以定义我的搜索功能使用的数组吗?

3 个答案:

答案 0 :(得分:1)

听起来你在这里有很多抽象概念,但是如果你只是模糊地使用一些术语(例如“帮助者”),我无法判断它是否是真正的抽象。一般来说,您的模型会与您的数据源进行通信。该数据源可以是数据库,服务,平面文件或任何/所有这些的组合。我经常使用外部服务来收集大部分模型数据,然后从专门的数据库中提取一些以应用程序为中心的数据。

帮助程序通常出现在视图级别,可帮助您显示数据。我自己的偏好是模型将原始数据返回给控制器,控制器将相同的原始数据转发到视图上,该视图负责确定如何显示它。这种流程不时有例外,但在我自己的使用模式中它们非常罕见。

简短版本:保持简单(并在常规范围内)。让您的控制器处理应用程序流和以应用程序为中心的活动(例如消息传递,会话访问等),让您的模型处理数据访问/检索/操作,让您的视图担心如何显示从模型返回的数据(通过控制器)。

在此基础上添加更多抽象通常只会增加不必要的复杂性。在没有真正了解你的情况的情况下,这只是指导,但我发现在我自己的经历中,它通常是可靠的指导。

答案 1 :(得分:0)

请记住,CakePHP(以及大多数MVC架构)的最佳实践是:

Model = fat
Controller = thin
View = skinny

话虽如此,只要它适用于您正在操作的数据,将功能放入模型中并不错。将模型视为处理所有数据特定问题(即存储,查询,操作,优化等)。控制器处理所有业务逻辑,而视图管理两者组合的显示。

Helpers旨在促进视图功能,而元素是可重用的视图。

至于你的其他问题,如果你被卡在某个地方,用代码示例将它们分解成个别问题可能会更简单。

答案 2 :(得分:0)

通常,您希望避免在数据库中使用逻辑。数据库应负责返回数据,然后模型将负责执行所需的任何操作。扩展数据库比添加更多处理能力要困难得多。除了可扩展性问题之外,数据库中的代码更难以维护。