MVC:我应该把这个数据访问逻辑放在哪里?

时间:2012-08-21 18:34:51

标签: model-view-controller

我一直在努力坚持严格解释MVC在家中重建个人网络应用程序,但我遇到了一些问题。

该应用程序是一个财务跟踪应用程序。我被困在第一页,这只是本月银行账户交易的清单。交易清单是我的模型。此时控制器和视图很容易设想。

但是,我还在页面顶部有两个按钮。它们是箭头,一个对应于前一个月,另一个对应于下个月的交易清单。如果上个月/下个月没有交易,我不希望启用这些按钮,所以我需要与数据库交谈以确定每个按钮是否应该在某处实际链接。

从我阅读的大部分内容来看,应尽可能将数据库访问封装在模型中,在控制器和视图中几乎没有数据库访问。

但是,这些按钮基本上需要询问数据库,“下一个/前几个月是否有任何交易?”答案将确定他们的链接是否被禁用,以及发送给用户的位置。

严格地说,将其逻辑放入事务列表模型似乎不合适,因为事务是否存在在请求范围之外超出了事务列表模型的关注范围。

我想我还可以创建另一个模型,该模型对应于存在交易的所有年 - 月组合。然后,我可以将此模型和事务列表传递给正确的视图。

或者我应该偏离无数据库访问模型之外的范例,只是将一些快速的数据库查询抛到视图中(因为结果本质上是一个UI问题,使导航变得更容易)?

你们对这个概念性问题有什么看法?

顺便说一下,我没有使用任何框架。这是宠物项目,旨在让我更熟悉MVC模式的细节。

2 个答案:

答案 0 :(得分:2)

  

...我是否应该偏离无数据库访问模型之外的范例,只是将一些快速的数据库查询放入视图...

简短的回答是:。如果你真的对学习MVC和更好的编码感兴趣,那么走捷径“只是因为”是一个非常糟糕的主意。域逻辑分离是MVC的一个基本概念,违反它将基本上从MVC转移到由可怕代码和“MVC框架”主导的领域。如果你想学习“MVC的基本要素”,你必须要明白,关键点是分离关注点,它们非常重要。

你问题中的很多文字都提出了一些关于模型应该是什么的混合思路,所以我将把你重定向到关于MVC模型的the most linked-to answer。答案包含了您想要了解的关于模型概念的所有内容。总结一下最重要的概念,模型不是一个类,它是一个层。模型层有许多组件都可以自己完成任务,从而为您提供可测试的,可扩展的,语义的和逻辑的域逻辑层。

请记住要小心:有关MVC的信息比有可靠的信息更多。你可以做的最糟糕的事情就是学习MVC。

编辑:我在回复时假设语言是PHP,所以我的一些答案可能反映了这个假设。但是,这些概念适用于几乎所有语言

答案 1 :(得分:1)

  

该应用程序是一个财务跟踪应用程序。我被困在第一页,这只是本月银行账户交易的清单。 交易清单是我的模型。此时控制器和视图很容易设想。

您网页上的所有内容都归类于“查看”域中。 “列表”是一个可视对象。

对于Web应用程序/页面,该模型存在于您的服务器上,在您的数据库中。网页上存在的所有内容(按钮,表单,列表框等)都是您查看域名。

  

从我阅读的大部分内容来看,应尽可能将数据库访问封装在模型中,在控制器和视图中几乎没有数据库访问。

View对象传统上直接与您的Model对象对话。这意味着您必须为View对象提供一种与数据库通信的方法。

一个例子,

  • http // server / transactions(获取所有交易)
  • http // server / transactions?from = x(从x获取交易)
  • http // server / transactions?from = x& to = y(从x到y获取交易)

可以通过View查看您的模型界面。