【问题标题】:How to design the interface for the Model in Model-View-Controller?如何设计Model-View-Controller中Model的接口?
【发布时间】:2011-12-04 14:10:33
【问题描述】:

我了解 MVC 模式的工作原理,但我一直有这个问题。如果你有一个很大的模型,其中有许多功能委托给不同的类,你是否必须定义一个包含所有方法的大型单片接口来操作和查询模型?

或者,该模型是否可以划分为多个模型,它们可以相互通信,然后您可以使用它们各自的控制器来操作它们?

谢谢

【问题讨论】:

  • 我使用 symfony(一个 PHP MVC 框架),模型表示为许多单独的类(数据库中的每个表最初有四个)。我看不出“单片”界面会走向何方。
  • 就我所见,模型基本上反映了一个表或一个实体,使用 CRUD 方法。我对这个问题很感兴趣,所以我会继续跟进。

标签: java model-view-controller interface model


【解决方案1】:

“ViewModel”概念在这里可能会有所帮助——Phil Haack 在“Professional ASP.NET MVC3”一书中也将其称为“视图特定模型”。

许多自动工具或“脚手架”生成器都希望创建单个页面/界面,但没有什么能阻止您为大型模型制作多阶段流程。

一种选择是为流程的每个阶段创建视图模型(即 BigProcessPartAViewModel、BigProcessPartBViewModel 等),然后生成一个控制器,用单独的视图处理每个阶段。显然,您需要跨多个阶段管理状态,可能使用数据库或会话。

此外,您的模型就是您的模型……它不是数据访问。因此,您可能需要一个额外的模型来处理进程内状态,以及一个允许多阶段事务的数据访问设计。

【讨论】:

  • 太棒了,我不知道。以后我得看看那个。但这种方法肯定是矫枉过正。
【解决方案2】:

没有任何内容表明您的模型必须是单个类或实体。

例如,在 Spring MVC 中,模型基本上是您在 Controller 中构造的 Map,带有键和值。

【讨论】:

  • 是的,我就是这么想的。只是我看到的所有控制器都只与一个模型对话。
【解决方案3】:

接口隔离是SOLID 之一,它代表面向对象编程和设计的 5 条基本原则。它说,如果您的界面变得过于“胖”,则需要将其拆分为更小、更具体的界面。更多详情Interface segregation wiki page

【讨论】:

  • 是的,这基本上就是我问这个问题的原因,因为处理单片接口真的很乏味,而且也不优雅。
猜你喜欢
  • 2011-01-06
  • 2014-01-10
  • 1970-01-01
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 2015-05-14
  • 1970-01-01
  • 2012-11-01
相关资源
最近更新 更多