MVC的数据库设计问题 - 每个模型1个表

时间:2008-12-24 14:35:50

标签: model-view-controller database-design

开始使用MVC框架的最大障碍与1模型到1 DB表概念有关。对我来说,除了一个简单的应用程序之外,它过于简单化和不切实际。然而,MVC随处可见,包括这个令人敬畏的StackOverflow站点。通常,我遇到的所有代码示例和教程都非常简单,在这些情况下,1对1关系可以正常工作。但是,我正在寻找的是一个可以解决表连接的MVC模型的可靠实际示例。在stackoverflow的情况下,我会想象一个DB设计,包括问题,标签,用户等表。在我的数据库设计中,我可能有一个Question_Tag链接表来查找与给定问题相关的所有标签。 MVC如何处理这个问题?

3 个答案:

答案 0 :(得分:13)

我不相信the MVC design pattern有任何内容表明每个域类应该有一个数据库表。实际上,MVC设计模式没有任何内容可以说你的模型应该或者必须在关系数据库中持久化。

这只是一些流行的框架(Ruby on Rails - 也许是ASP.NET MVC?)已经采用的策略,看起来很方便。但它不是MVC的要求。 Spring MVC(针对Java世界)没有如何将模型组件映射到数据库的固有概念,事实上它的美妙之处在于它并不关心 - 您只需提供要使用的模型数据,以及您获得的位置它来自MVC框架并不关心。

换句话说,您不需要假设MVC模式意味着您必须为每个模型组件使用一个数据库表。哎呀,你甚至不需要使用数据库,你的模型也可以来自平面文件或Web服务(MVC的优点是,如果你正确地设计你的应用程序,你可以交换不同的数据层实现超出您的应用程序和视图或控制器甚至不知道)。

答案 1 :(得分:4)

我认为你将MVC与ORM混淆了。 ORMS将您与数据库表和对象一对一绑定。

您需要做的是将您的Model对象从MVC发送到DAL层,该层可以从SQL查询中为您填充它们并返回对象。同样,您可以将带有更改的填充对象发送回要保留的DAL图层。

这是一个更清晰,更灵活的设计,您可以将其与MVC模式一起使用,并且在使用SQL的连接功能时,您不必将对象耦合到数据库表。

答案 2 :(得分:1)

好的艾哈迈德,这是有道理的。但是在我看过的所有MVC示例中,该模型都是BLL / DAL的组合。你所说的是将模型保持为纯BLL并创建一个单独的DAL。我认为使用现有mvc框架的一个主要特点是加快开发速度。如果我将不得不在MVC之上创建一个DAL,我可以坚持我现有的非MVC开发过程,创建具有独立业务逻辑和数据访问层的页面。