ID在任何环境中都占有重要的地位,比如说我们每个人都有个ID,这就是身份证号码。
当然,也有人有两个身份证,这些人是异类,在程序中凡是有两个ID的东西也一样。
GRAILS中的ID的作用相对于其他系统的ID则更为巨大。domain默认为一个domain对象产生一个ID,同时命令行生成的画面也将ID作为params的一个重要的参数来传递。
如果我们放弃使用ID,我们在GRAILS程序的开发中也不会好受,这就是所有framework带给我们的缺点。
当你无法改变一个东西的时候,你就得学会适应。
如果你暂时转不过这个弯,或许我下面谈到的内容会让你的思想得到解脱。
GRAILS是一个整合了多种框架的应用程序框架,作为一个framework而言,它本身就规定了应用程序开发的具体模式,它在提供各种便利的同时,也将你限制在一定的范围内。这或许就是framework单词的frame的意思。
ID作为GRAILS底层hibernate persist框架的一部分,也不可避免的作为限制条件将开发手段限制住。
默认的,ID是作为domain表的主键而存在。如果不用ID作主键,而用其他的多个字段建立组合主键的话,GRAILS命令生成的controller和view就必须作很大的改动才可用。这样我们又不得不手写大量的代码,这是我们所深恶痛绝的。
从另外一个方面来思考,多个字段的组合主键实际上是把多个字段的组合作为一个唯一的决定条件去决定一个真值表达式,这在关系数据库的原理当中和ID作为主键并没有什么区别。多个字段的组合实际上是一种变相的将业务逻辑存放在数据库端的解决方案。实际上,如果用constrains将这种商业逻辑以groovy代码的形式固定下来,要比多个字段组合更为符合现在的多层的框架。这样,数据库的真正功能就和文件一样,只是作为一个persist的媒介而存在。在更换persist媒介的情况下,后者显然要比前者更灵活。估计这也是GRAILS框架设计者的想法。
作为GRAILS的用户,个人建议其他用户没有必要和GRAILS的默认属性过不去。从了吧,或许没有你想象中那么痛苦。
分享到:
相关推荐
/$id?"{ constraints { } } "/"(controller: "article") // 将 "article" 替换为你的控制器名,注意小写 "500"(view: '/error') } } ``` 6. **Groovy Map 键值处理** Groovy 中,Map 的键默认被视为字符串...
在Grails中开发RESTful API是一项常见的任务,这个文档提供了基于Grails 3.1.5版本的REST教程。Grails是一种基于Groovy语言的开源Web应用框架,它利用了Spring Boot的功能,使得构建现代互联网应用程序变得更加高效...
<button id="myButton">Click me $('#myButton').click(function() { alert('Button clicked!'); }); ``` 6. **优化和压缩** Grails资源管理器允许你进行资源的合并和压缩,提高页面加载速度。在生产环境...
- 可以映射到特定控制器和动作,如 `/books/show/$id`。 9. **Grails 插件系统** - Grails 插件是可重复使用的代码模块,提供了额外的功能和扩展。 - 常用插件包括缓存插件、安全插件(Spring Security)、邮件...
在本教程中,我们将探讨如何使用GORM(Grails Object-Relational Mapping)构建Spring Boot应用程序。GORM是Grails框架的核心部分,它为开发者提供了简单、强大的数据持久化功能,支持Hibernate和MongoDB等数据库。...
### Grails登录实例详解 #### 一、简介 本文档将详细介绍如何在Grails框架下构建一个简单的登录系统。此示例不仅展示了基础的登录功能,还包括了密码加密等安全特性。通过本教程,读者可以了解到如何从零开始搭建...
在Grails框架中,Ajax是一种常用的前端技术,用于实现页面的部分刷新,提高用户体验。本教程将深入探讨如何在Grails应用中使用Ajax,通过几个实际的例子来帮助理解其工作原理和常见用法。 1. **Ajax简介** Ajax...
《逐步学习Grails框架(5):构建动态组合查询与分页功能》 在Grails开发过程中,构建动态组合查询和实现分页展示是常见的需求。本篇教程将介绍如何在Grails应用中创建一个根据产品编号进行组合查询,并以分页形式展示...
<textarea name="editor1" id="editor1" rows="10" cols="80"> 这里是默认的编辑器内容... var oFCKeditor = new FCKeditor( 'editor1' ) ; oFCKeditor.BasePath = "${resource(dir: 'js/fckeditor')}" ; //...
### Grails 入门教程知识点总结 #### 一、登录页面设计与实现 **知识点概述:** 本章节主要介绍如何为Grails应用设计并实现一个登录功能,包括创建登录所需的域类、设置默认管理员账户、构建登录页面以及处理登录...
<input type="file" id="fileInput"> $(function() { $('#fileInput').uploadify({ 'swf': '/js/uploadify.swf', 'uploader': '/upload', 'fileTypeExts': '*.jpg;*.jpeg;*.png;*.gif', 'onUploadSuccess': ...
【Grails中集成GWT】知识点详解 在Web应用开发中,Grails是一个基于Groovy语言的开源框架,而Google Web Toolkit (GWT)则是一个用于构建和优化复杂JavaScript前端应用的开发工具。将这两者结合,可以让开发者利用...
根据提供的文件信息,可以看出这份文档主要涉及Grails框架的基础使用说明。从文件的标题和描述来看,这是一份面向Grails初学者的指南性文档,旨在帮助初学者了解Grails的基本概念并掌握如何使用该框架进行开发。接...
id = hotel.id name = hotel.name address = hotel.address } } } } ``` 在这个例子中,`render`方法设置了响应的内容类型为JSON,并使用Groovy的内建JSON支持来构建JSON对象。 ##### 3.4 动态获取JSON ...
《一步一步学Grails(8):添加材料费与物料表功能》 在Grails框架下构建Web应用的过程中,用户交互的界面设计与数据管理是关键环节。本篇教程将带领你逐步实现一个允许用户录入“材料费”以及查看和编辑“物料表”...
6. **用户界面优化**:通过自定义错误消息、添加警告信息、实现确认信息、移除数据ID、格式化数据显示等功能,提升用户体验。 7. **用户认证与权限管理**:集成Spring Security框架,实现用户认证和授权,保护应用的...