最佳实践 - 从视图访问域对象列表?

时间:2011-02-03 16:53:14

标签: java model-view-controller grails view

只是想知道(在Grails / Java中)在MVC设计的view / gsp中调用:Foo.list()是不好的做法,而不是将其传递给模型(即foos: Foo.list())和用那个?

在我看来,由于显示器非常简单,这很好,但另一方面我知道直接从视图访问域对象是不好的做法。

提前致谢。

4 个答案:

答案 0 :(得分:1)

不这样做的一个非常实际的原因是,您最终可能希望使用来自不同操作的相同视图,最终以某种方式过滤数据。您可能并不总是想要处理Domain.list()。

答案 1 :(得分:1)

你所做的一般被认为是一种不好的做法。原因很简单:您的观点与您的模型紧密相关。让我们发现后果:

  1. 如果您需要过滤掉返回的列表,则必须在视图中执行此操作。例如,假设您希望显示启用了分页的Foo实例列表。因此,您需要拥有max参数,并且会在视图中使用Foo.list(max: params.max) max是您可以想象的数百个参数(订购,排序......)。因此,您的视图不仅取决于域实例,还取决于请求参数,您必须处理它们。
  2. 最重要的是,只要您需要呈现与JSON(例如Ajax)或XML或其他任何内容相同的数据,就必须复制此代码。而这种不良做法,不易维护且容易出错。
  3. 结论:您可以为原型设计或不会重复使用的视图(例如管理员资料)执行此操作。忘记它用于其他情况。

答案 2 :(得分:0)

我认为在原型阶段,这样的陈述“有点”可以接受。

但是,更现实的是,这种简单的东西在生产代码中并没有真正发生。当您开始操作数据,或者说,检索大量不同的对象并使用它们执行某些操作时,您会发现您可能希望返回与UI层完全不同的内容...

现在,如果你已经开始在早期的一个声明中构建一些闪存,这将导致你必须重做部分UI代码...这不太好,并且可能会引起头痛。 / p>

另外,你已经回答了自己的问题:是的,我认为这是不好的做法。

答案 3 :(得分:0)

我同意这是不好的做法。即使是在原型设计过程中,从控制器传递也不会增加额外的时间。