首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Grails时,我是否应该关心Open View in View?

关于使用Grails时是否应该关心Open View in View,这是一个与视图渲染和数据库查询相关的问题。Open View in View是一种编程模式,它允许在一个视图中打开另一个视图,并在新视图中执行数据库查询。这种模式可以使代码更简洁,但也可能导致性能问题,因为每次请求视图时都会执行数据库查询。

在Grails中,Open View in View模式通常是通过在控制器中使用render方法来实现的。例如:

代码语言:groovy
复制
def show() {
    def book = Book.get(params.id)
    render view: 'show', model: [book: book]
}

在这个例子中,show方法从数据库中获取一本书,并使用render方法将其传递给show视图。这种方式可以避免在视图中直接执行数据库查询,从而提高性能。

如果您在使用Grails时发现Open View in View模式,您应该考虑以下几点:

  1. 性能:Open View in View模式可能会导致性能问题,因为每次请求视图时都会执行数据库查询。为了提高性能,您可以考虑将数据库查询放在控制器中,并将结果传递给视图。
  2. 可维护性:Open View in View模式可能会使代码更难以维护,因为每个视图都可能包含数据库查询。为了提高可维护性,您可以考虑将数据库查询放在控制器中,并将结果传递给视图。
  3. 安全性:Open View in View模式可能会导致安全问题,因为视图可能包含敏感信息,如数据库连接字符串。为了提高安全性,您可以考虑将敏感信息存储在配置文件中,并使用Grails的安全机制来保护它们。

总之,Open View in View模式可能会导致性能、可维护性和安全问题。为了避免这些问题,您应该将数据库查询放在控制器中,并将结果传递给视图。这将使代码更简洁,更易于维护,并提高性能和安全性。

相关搜索:我应该在Silverlight项目中使用Model-View-ViewModel(MVVM)模式吗?要使用app:layout_behavior="@string/appbar_scrolling_view_behavior“,我应该实现哪个库我是否应该对enableSnapshots使用协调世界时在执行get和put时,我是否应该使用单个事务?输入负数时显示错误消息。我是否应该使用try语句以及如何使用?在执行多个SQL查询时,我是否应该尝试使用相同的连接?我使用此代码在下载过程中播放视频,但当我尝试播放时,video_view无法播放视频当向前声明类时,我是否也应该在那里使用属性定义?在发送带有附件的电子邮件时,我是否应该处理MimeKit使用的流?当使用.Net核心3.x时,我是否应该升级到EntityFrameWorkCore 5.x?如何修复每当我在我的Expo react-native中使用KeyboardAwareView或react-native- keyboard -aware-scroll-view时显示的白色键盘空间?在使用websocket时,我是否应该为每个不同的任务打开一个新的websocket连接?或者我应该在一个连接中做所有的事情?当用户可以在活动图中的操作之后移动到多个操作时,我是否应该使用多个传出控制流或决策节点?将文件添加到vault时,Solidworks PDM API会使用多个序列号。是否应该在我的代码或vault中更改某些内容?是否有仅在登录时才调用的文件,其中我设置了一个全局变量,并且应该在laravel的所有控制器和视图中使用该文件
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Rails框架流行在他的设计理念

这两天看了一本书《Grails权威指南》,看了这个Java上Rails框架,其中有两条设计理念: 1、make simple thing easy and make complex possible...2、Convention Over Configuration --约定高于配置 Rails几乎成了敏捷web框架的代名词,Java社区的Grails,.NET开源项目Mono Rails和Subsonic...框架: 无论是Castle MonoRail还是ASP.NET 的MVC框架清晰,简洁,你要用这两个开发web框架,就一定要按他的方式做,model文件就放在models目录里,controller,view...只是自己创建一套规则是否会更好。...ActiveRecord做CRUD很简单,每个对象可以有自己的Fetch,FetchByxxx方法,从开发者的角度看这些对象,它们知道如何加载和保存自己,对象自己来维护IsDirty之类的标识,开发者不必关心这个对象应该

2K50

创业公司技术选型原则

因为当前丰富的开源工具已经提供了充分的选择,在大多数情况下能够让人找到既满足自己要求同时又符合组织技术路线的工具。这里假设贵公司的技术路线并不是那种剑走偏锋类型。...反过来就不一定了,比如我公司一直使用Grails,在国内的普及程度就远低于所谓的SSH或SSM。但其学习曲线一点都不高,而且开发效率数倍于前者。...前者的好处在上面已有说明,至于后者,则说明项目在与时俱进,对于新出现的使用场景大概率有较好的支持。 即使有很好的外部支持,也不意味着就应该放弃内部支持能力的建立。...还是以前面提到的Grails为例,典型的Grails应用开发主要就是: 开发Domain Class 开发Service 开发Controller 开发View 通过将应用本身拆解成这样的关键组件,从某种程度上来讲既规范了开发内容和流程...此阶段,最重要的原则莫过于:是否符合组织内主流技术路线和是否有助于规范化开发流程。 很遗憾,虽然很想像前两节那样举一些个人实际的例子来佐证,但由于我所处的公司尚未达到此阶段,故只能在此纸上谈兵。

2.1K20
  • MVC 框架的映射和解耦

    不过,这样的代价是 Controller 变成了一个百事通,如果它要关心 Model 和 View 的具体实现,耦合的问题只是换了一件外衣而已。所以,需要对 Controller 进一步解耦。...这当然不会入程序员的法眼了,于是框架替你把参数绑定到一个数据集合的对象上,你获取起来就容易多了,比如在 Grails 框架中,可以这样写: def example = { def name =...值得一提的是,用过一个框架,它对于 URL Mapping(front-controller 做的事情)和 View Routing(backend-controller 做的事情)通过这样一种有趣的机制来完成...这让啰嗦的程序员又觉得不开心了,应该有限的精力专注到业务特有的逻辑和页面上去,这些通用的部分框架能不能替聚合,而我就不需要关心了?... 并且可以灵活地使用继承和参数传递,可是依旧不爽,每一个页面跳转都要配置这样一块豆腐干,实在是很啰嗦。

    61100

    MVPArms MVP快速集成框架

    返回的数据,无需关心内部细节,及是否使用缓存 interface Model { Observable> getUsers(int lastIdQueried...Model接口,并且继承BaseModel,指定范型为ServiceManager和CacheManager,然后通过两个Manager拿到需要的Service和Cache为Presenter提供需要的数据(是否使用缓存请自行选择...Author,以及所有为Open Sourece做无私贡献的Developer和Organizations,使我们能更好的工作和学习,本人也会将业余时间回报给开源社区 MvpGoogle官方出品的Mvp...Dagger2Google根据Square的Dagger1出品的依赖注入框架,通过Apt编译生成代码,性能优于使用运行时反射技术的依赖注入框架..... ---- Hello 叫Jessyan,如果您喜欢的文章,可以在以下平台关注?

    3.4K1815

    iOS无埋点数据SDK实践之路

    在真正进入循环匹配之前,先进行如下3步判断: 判断 view 类名是否相等; 判断 view 所在的 viewController 类名是否相等; 判断 view 所在的 window 类名是否相等;...最后,要特别感谢的同事王佳乐,由于他对文章的排版与校对工作,才使得本文能更好的展示给大家。同时也要感谢组内的所有同事,在开发遇到困难,给予了很多的帮助。...Q1: SDK 都使用KVC配置获取业务数据,是否会增加维护KVC配置的工作? A1: 会有对 KVC配置 的维护与管理工作,不过 SDK 也简化了这块的管理工作。...“关心位置” 的意思是只使用当前的位置,具体表现是viewPath中不包含任何通配符;“关心内容” 的意思是指定一个想要统计的内容。...数据SDK在活动发生点击,收集当前活动对应的url,并跟随点击事件一起上报。 圈选SDK上传“关心位置” + “关心内容”的圈选配置,关心的内容指定为想要统计的活动的url值。

    1.6K20

    Python-jenkins模块获取jobs的执行状态操作

    jenkins.Jenkins(‘http://%s:%s@192.168.37.134:8081/’,username, password) 获取状态前先确认2019文件夹下的get_node_list任务是否存在...split(‘\n’)[-2].split(‘:’)[-1].strip() 启动jobs: server_1.build_job(‘2019/get_node_list’) 在job执行结束前使用...在这里在job里面添加了DAYS和VIEWS两个参数: **DAYS:**默认统计最近一天的运行情况,如果执行的时候输入的是0则代表统计所有的运行情况。...列出了序号、视图名称、job名称、job执行成功的平均执行时间、job执行成功次数、总的执行时间、job执行成功率 job执行演示: 执行构建配置的参数如下 ?...average_success_duration = success_duration else: average_success_duration = success_duration * 1.0 / success_count #将关心的数据按照一定的格式写到

    3K30

    ViewDragHelper使用笔记及侧滑菜单实践

    child, int pointerId); 参数1 准备捕获的子view 参数2 准备捕获的指针ID 该方法的返回值决定了ViewDragHelper是否要捕获这个view;如果返回false就不捕获...; 说的一下的思路吧,在父布局中持有了需要拖拽处理的子view的引用,如果捕获的view持有的view就返回true,捕获这次事件 /** * 决定是否捕获此view * 这里自由决定 *...() 即可,该方法返回值就是view拖拽后的坐标值;默认是不处理的; 下面是的实现,为了防止拖拽出屏幕做了简单处理 /** * 水平 拖动 * @param child 拖动的元素 * @param...的位置发生变化会触发 onViewPositionChanged() 方法 /** * 当 view 的 position发生改变触发 * @param changedView 拖动的view...写一个SwipeLayout 继承自 LineaLayout; 在构造就创建好 DragHelper public SwipeItemLayout(Context context, @Nullable

    1.4K60

    MySQL多版本并发控制机制(MVCC)-源码浅析

    感谢cmake,能够让在mac上用xcode去debug MySQL,从而能去领略它的各种实现细节。 笔者一直对数据库的隔离性很好奇,此篇博客就是debug MySQL过程中的偶有所得。...MVCC的优势 当我们要对一些数据做一些只读操作来检查一致性,例如检查账务是否对齐的操作时候,并不希望加上对性能损耗很大的锁。这时候MVCC的一致性版本就有很大的优势了。...让我们进一步分析trx_assign_read_view函数: trx_assign_read_view |-read_view_open_now |-read_view_open_now_low...= view->low_limit_id; } // 忽略purge事务,purge,当前事务id是0 if (cr_trx_id > 0) { read_view_add(view);...trx->read_view) { trx->read_view = read_view_open_now( trx->id, trx->global_read_view_heap); trx

    1.7K31

    Unity应用架构设计(1)—— MVVM 模式的设计和实施(Part 2)

    MVVM的核心思想就是解耦,View与ViewModel应该感受不到彼此的存在。 View关心怎样渲染,而ViewModel只关心怎么处理逻辑,整个架构由数据进行驱动。...它是一个职责非常单一的类,监听Value的数值是否发生变化,当变化时,触发OnValueChanged 事件,通知View 做出相应的更新。...BindableProperty是一个很好的设计,它不仅可以用在ViewModel中,还可以用在View中,用它来修饰 ViewModel,当ViewModel 改变,比如初始化时,或者从一个ViewModel...那么是否可以将这部分代码抽象到一个公共类中呢,并且暴露出一个简单的方法提供给View来初始化这些OnValueChanged事件,比如: PropertyBindingUtils.Init<string...它是用来监听ViewModel中的属性值变化的,用来替换沉长的 oldVm.Property.OnValueChanged +=和-= NameValueChanged,理所应当应该放在View中,因为每个

    2.2K90

    面向对象进阶

    __dict__.pop(key) def __delattr__(self, item): print('del obj.key,执行') self....__dict__) View Code __del__ 析构方法,当对象在内存中被释放,自动触发执行。...注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收自动触发执行的。...这就是当你使用关键字classPython在幕后做的事情,而这就是通过元类来实现的。...好吧,一般来说,你根本就用不上它: “元类就是深度的魔法,99%的用户应该根本不必为此操心。如果你想搞清楚究竟是否需要用到元类,那么你就不需要它。

    32910

    javascript 中的 delete

    编写了 一个简单的测试脚本 来测试 delete 操作符对全局代码,Function 代码和Eval代码的操作 是否遵循规范.测试脚本检查- delete操作符的返回值,以及当属性应该被删除是否被删除...请小心使用Web上对 Javascript 的解释,在理想的情况下,应该去寻求理解问题的核心;) 6. 'delete' 与 host 对象(宿主对象?)...,会抛出 TypeError: [javascript] view plaincopy (function(foo){ "use strict"; // 在此函数内使用 strict mode...编写了 一个简单的测试脚本 来测试 delete 操作符对全局代码,Function 代码和Eval代码的操作 是否遵循规范.测试脚本检查- delete操作符的返回值,以及当属性应该被删除是否被删除...,会抛出 TypeError: [javascript] view plaincopy (function(foo){   "use strict"; // 在此函数内使用 strict mode

    3K80

    View的有效曝光监控(上)|RecyclerView 篇

    看到这两个方法在RecyclerView内部会在View移动出可视区域的时候被触发。...源码分析 如果各位关心view的绘制流程,那么应该都知道这两个方法。...那么也就是当RecyclerView的子控件被添加到RecyclerView上,就会触发子view的attachToWindow方法。...View有效区域出现超过1半 这个吧,说起来有点丢脸,google查出来的,其中核心在于 view.getLocalVisibleRect,这个方法会返回当前的view是否出现在window上了。...觉得即使面试失败的情况下,我们也还是需要在其中学习到一些东西的,毕竟机会还是给有准备的人。当然据我现在所知,应该饿了么用的是阿里的那套控件曝光自动化埋点的方案,还是有些不同的。

    1.2K40

    「Android 架构」—— MVVM 详解

    那么应该怎么做呢?—— 使用 架构模式!MVC、MVP、MVVM、...任何一种都要比没有架构设计的流水式代码好得多,MVVM 是 Android 开发最好的架构选择之一。...Google 官方也非常支持和鼓励开发者使用这一架构模式。 本教程将为你讲明白到底什么是 MVVM,虽然也不喜欢理论,但有时候在实际操作之前先了解它非常重要,所以请务必耐心看完。...当你查看上面的架构模型图,你可能想知道 View 如何获取它应该显示的所有数据。如图,箭头仅指向一个方向 -> ViewModel。...Repository 具有本地存储和服务器之间的中介这么一个特殊角色,你可以在此检查是否应该在本地缓存远程数据等。Repository 也是 ViewModel 的单一真实数据来源。...想在开始为你省去不必要的混乱,这就是为什么那些可观察到的箭头没有出现在介绍 MVVM 的第一个图表中。 ?

    1.9K40

    MVP:Android guidelines

    这意味着当用户滚动到结尾view知道必须加载新页面。可以命名方法onScrolledToEnd()让具体的presenter处理具体做什么。...不要在Presenter接口中创建Activity-lifecycle-style回调 使用这个标题的意思是presenter不应该有像onCreate(...)...如果使用自定义view怎么办? presenter不应该有这么复杂的生命周期。事实上,主要的Android组件都是以这种方式设计的,但并不意味着你必须也这么做。...不过这样做有一个问题就是你需要注意view是否为null,每次presenter用到它的时候都要检查一下是否为null。这点确实有点烦…… 说了presenter和view是一对一的关系。...这样的话,即使进程被杀,presenter也可以使用磁盘缓存恢复视图状态。 view应该关心必要的请求参数以恢复状态。例如,在我们的示例中,我们只需要保存查询。

    36430

    【React Native 安卓开发】----侧边栏的实现DrawerLayoutAndroid以及第三方框架react-native-side-menu的使用【第六篇】

    前言 做过安卓原生开发的童鞋们应该都做过侧边栏这个东西,而且对于开源框架SlidingMenu和android官方侧滑菜单DrawerLayout应该都不陌生。...导航视图一开始在屏幕上并不可见,不过可以从drawerPosition指定的窗口侧面拖拽出来,并且抽屉的宽度可以使用drawerWidth属性来指定。...属性 drawerLockMode enum(‘unlocked’, ‘locked-closed’, ‘locked-open’) 设置抽屉的锁定模式。...keyboardDismissMode enum(‘none’, “on-drag”) 指定在拖拽的过程中是否要隐藏软键盘。 none (默认值),拖拽不会隐藏软键盘。...style样式,需要用[]将样式括起来 */ >抽屉 <Text style={[styles.textStyle, styles.textLarge]}

    6.7K40

    微信外H5跳转小程序——组件(vue项目)

    4、修改云函数权限 添加一下这部分配置,注意这里的名称要和云函数的名称一致: 云函数代码 1、编写云函数代码 如果是原生小程序,当配置完云开发+云函数之后,小程序项目目录应该就多出一个云函数的目录(...H5部分 1、 的想法是写一个通用组件,不包含任何样式,内容通过传进来,这样后面不管什么样的跳转都可以使用它了。 可以这样: <!...,代表wx jssdk是否config完成) · isCanInitWechat 是否preConfig完成,同时外部的一些参数是否准备好了。...ok 这样就开发完成了 完整代码 <div class="<em>open</em>_app_div"...对于用户触发才调用的接口,则可以直接调用,不需要放在ready函数中。

    1K30
    领券