【问题标题】:Should I create Model and DAO classes for page elements?我应该为页面元素创建模型和 DAO 类吗?
【发布时间】:2014-08-03 07:03:11
【问题描述】:

有趣的问题:在电影院的 MVC Web 应用程序中,我有 Model 类,例如 FilmShowing。另外,我有像 FilmDAOShowingDAO 这样的 DAO 类来从数据库中检索数据...

我的问题是,我应该为不是真正的“实体”而只是页面元素创建类吗?我的意思是像 CarouselSidebar 这样的类,以及它们对应的 DAO。

我认为拥有SidebarDAO 真的很奇怪,但是从控制器中从数据库中检索到要显示在页面上的东西也是如此......

【问题讨论】:

  • 请阅读c2.com/cgi/wiki?DomainObject 并停止将它们称为“模型”
  • @tereško,那么,在您看来,FilmSidebar 都是我的应用程序的 域对象,因此,它们应该以相同的方式处理?
  • 实际上,Sidebar 将是一个presentation object 并被视图使用。此外,您可能会发现这很有用:stackoverflow.com/a/16596704/727208
  • 谢谢@tereško。我一直在阅读您的一些有趣的答案...只有一个问题:您所谓的 Representation Objects 与 L-Three 提到的 ViewModel 类几乎相同在他下面的回答中,或者这里定义的那些,例如:fuelphp.com/docs/general/viewmodels.html,或者他们不是?
  • “ViewModel”实际上是替换 MVVM 中的“控制器”。当您无法控制模型的 API 或/和视图时(通常是您进行 3rd 方系统集成的情况),它是您使用的一种结构。 FuelPHP 的“视图模型”只是对simple php templates 的另一种歪曲……你真的不应该向 Fuel 学习应用程序架构。

标签: web-applications model-view-controller architecture dao


【解决方案1】:

您所指的模型如Film 表示视图使用的数据。它是 MVC 中的 M。事实上,我喜欢将它们视为视图模型,因为您可能希望它们针对特定视图进行优化。所以每个视图都有其特定的视图模型;当然,您可以在其中重用特定的通用模型。

这与数据实体无关,数据实体是后端而不是前端的一部分。数据实体仅代表存储在数据库中的实体,它们可能与视图模型完全不同。

在您的情况下,Carousel 可能只是您在一个或多个页面中使用的控件。这意味着您可以创建一个轮播视图模型,其中包含轮播的所有信息,以便正确显示所有内容。 Carousel 视图模型可以是页面视图模型的一个属性,它被传递给页面。控制器负责以数据实体的形式从数据库中获取数据,将这些数据实体映射到页面视图模型和轮播视图模型,并传递给视图。

如果需要,您可以添加额外的抽象层,以便在控制器和数据层(洋葱架构等)之间存在服务、应用程序和域层;但这一切都取决于您的要求和环境。

【讨论】:

  • Thnaks,ViewModel 类的概念很有趣,我以前从未听说过...
猜你喜欢
  • 2011-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-30
相关资源
最近更新 更多