2011-02-07 231 views
0

我使用MVC2,并有一个结构类似如下建立一个网站:设计问题

厂 - > Domain.objects - > MVC2

一厂包含日志类型,枚举里面详细介绍了其行动已被应用于一个对象。 该域请求对象并将其提供给MVC2模型,并将其作为IEnumerable Ilog传递给视图,并且该视图迭代它。

我的问题是我希望视图创建一个基于日志类型的链接,所以我在视图中创建了一个switch语句来创建这个功能。 switch语句正在利用存储库中的enum,但是这对我来说似乎有点不对劲:将存储库暴露给视图。

我应该将Log类型封装在域中对象的新IList中吗?或者可以在存储库中引用此枚举。

如果这些都不是理想的,那么最好的解决方案是什么?

感谢您的帮助,我可能会得到。

回答

0

最好的解决方案是使用视图模型。视图模型是专门针对视图需求量身定制的类。因此,这里是一个控制器动作典型的工作流程:

  1. 查询仓库去取一些域对象
  2. 地图的域对象到相应的视图模型(AutoMapper可以帮助你在这里)
  3. 传递视图模型到视图

因此,在这种情况下,视图没有任何领域模型的知识。这是一般的。

现在针对您根据枚举值生成不同链接的特殊情况,我认为在视图中编写ifs和switch会导致丑陋。你不觉得吗?所以写一个自定义的HTML帮助,将基于视图模型正确的链接将是巨大的尤其是当你的看法是这样的:

<%= Html.MyLink() %> 
+0

谢谢Darin!我想我一直在误解什么样的视图模型。我会在访问域的视图模型中放入一些逻辑。控制器是否应该访问域并将这些信息传递给特定的视图模型,然后将任何结果推送回域? – 2011-02-07 19:08:58

0

我的想法是,这是一个ViewModel那些伟大的用途之一,在视图模型中包含该信息。