如果一个域类有许多引用其他域类的字段,那么访问控制器中的字段,将它们添加到模型或直接访问视图中的字段是否最佳?
换句话说,一个小模型比一个简单的视图更好,反之亦然?
例如:
// Controller
render(view: 'index', model: [b: a.b, c:a.b.c])
// View
${a}, ${c}, ${c.id}
Vs以上。
// Controller
render(view: 'index', model: [a: a])
// View
${a.b}, ${a.b.c}, ${a.b.c.id}
另外,这些替代品在Grails / GORM中是否具有性能影响?
答案 0 :(得分:1)
我会说这完全取决于您的使用组织,但通常我会尝试将每个渲染调用中的模型中的条目数保持为小。
如果页面的一部分需要显示a,b和a.b.c的部分内容,那么将它们作为单个引用传递给“a”似乎没问题。
如果您正在显示的页面的不同部分,一个部分引用a,另一个部分引用ab,另一个部分引用abc,那么我建议您查找模板(http://www.slideshare.net/laelfrog/grails-layouts-sitemesh),然后通过“a”进入顶部,并将“ab”从该顶级页面传递到使用ab作为“b”等的部分模板中。
所以如果你的控制器有:
render( view: 'index', model: [a:a] )
index.gsp可能如下所示:
<g:render template="toplevel" model="[a: a]" />
<g:render template="midlevel" model="[b: a.b]" />
<g:render template="bottomlevel" model="[c: a.b.c]" />
然后,在模板_toplevel中,您可以使用“a”(实际上,对于此级别,传递模型是多余的,因为当前模型与控制器发送的模型相同)。
但是在_midlevel中,你可以将“a.b”作为“b”访问,而在_bottomlevel中,你可以将a.b.c作为“c”访问。每个模板应该知道它需要什么,并且应该真正拥有它们自己的名称,而不是依赖于2中的模型呈现链。
就优化而言,我怀疑这是一个问题,除非你一遍又一遍地重做很多工作来构建你的模型。仅仅取消引用儿童并不是一个真正的问题。