Grails教程之--我的理解
最近工作中接触到了Grails,对于这门技术,网上的资料不算太多,有的基本也是大同小异。我打算边学边写一些东西,毕竟是一个学习的过程,写的东西如果有错误或者理解不正确的地方,还希望大家能指出来。帮助我提高,也避免我误人子弟,混淆视听。废话不说了,现在开始。
学习网站及资料:
首先推荐大家一个网站:http://www.kuqin.com/grails-doc-1.0/
这里是Grails1.0的中文手册,当然现已经是Grails2.x了,但是我们通过这个手册了解一些基本的概念还是很好的。
环境搭建和开发工具:
我使用的是GGTS3.0版本,好像就是Eclipse装了个插件的感觉。。。,好像也可以通过Eclipse直接安装一个Grails的插件。
言归正传,现在我来大致说一下我对于Grails的理解。首先Grails在我看来就是继承了以及Spring和Hibernate的框架,语法适用了Groovy的形式,当然也可以在Grails中直接使用Java的语法。Grails对于java以及其Spring,Hibernate的封装进行的很深入,基本重写了两大框架大量的接口。这样的好处就是我们使用起来非常简单易用,不好的地方就是有的时候出现一些很诡异的问题时,不好发现原因。
下面说一些需要注意的事项。我们用IDE工具创建一个Grails后,他就会自动为我们生成一些目录,每个目录(文件夹)都有自己特定的名字,不要手欠去改这些名字。其中说几个重要的文件夹:domain、views、controllers。对应我们平时使用的MVC分层。domain里面一般是POJO类,views顾名思义就是写我们的页面gsp文件(不是jsp,我没有写错,是gsp),controllers里面就是我们请求转发的action,当然在Grails中我们都叫XxxController。对于复杂的业务,我们还可以在Services文件夹里面写上一些业务逻辑。
对于Grails的缺点,我觉得在Controllers里面会出现一些重复的代码。对于这一点,我觉得还是因人而异,我习惯把类分细一点,所以对应的domain和controller比较多,相对应这些controller处理业务时,多少会有一些重复的代码。但是controller间的调用是很垃圾的做法(就如同Action间的互相调用),如果把所有的逻辑都写到Services中去的话,Services就会很多,在项目移交的时候,往往比较耽误时间。适用Grails主要还是为了快速的开发,所以我觉得多一点冗余代码,也是可以理解的吧。
时间不多,晚些时候再写上一篇,下一篇主要介绍一下Grails各个层之间的调用以及命名规则。
Grails教程之--我的理解的更多相关文章
- 智能合约语言 Solidity 教程系列10 - 完全理解函数修改器
这是Solidity教程系列文章第10篇,带大家完全理解Solidity的函数修改器. Solidity系列完整的文章列表请查看分类-Solidity. 写在前面 Solidity 是以太坊智能合约编 ...
- Grails教程
1简介- Reference DocumentationVersion:null Table of Contents 1.1Grails 2.0有那些新特性?1.1.1面向开发的特性1.1.2核心特性 ...
- CSS3教程:box-sizing属性的理解
说到 IE 的 bug,一个臭名昭著的例子是它对于“盒模型”的错误解释:在 IE5.x 以及 Quirks 模式的 IE6/7 中,将 border 与 padding 都包含在 width 之内.这 ...
- CSS3教程:box-sizing属性的理解border、padding与容器宽度的关系
说到 IE 的 bug,一个臭名昭著的例子是它对于“盒模型”的错误解释:在 IE5.x 以及 Quirks 模式的 IE6/7 中,将 border 与 padding 都包含在 width 之内.这 ...
- 易于理解的 python 深度学习摘要算法教程
序 "我不想要一份完整的报告,只要给我一份结果摘要就好".我经常发现自己处于这种状况 -- 无论是在大学里还是在我的职业生涯中.我们准备一份全面的报告,但老师/主管却只有时间阅读摘 ...
- Docker入门教程(一)介绍
http://dockone.io/article/101 Docker入门教程(一)介绍 [编者的话]DockerOne组织翻译了Flux7的Docker入门教程,本文是系列入门教程的第一篇,介绍了 ...
- node-webkit教程(11)Platform Service之shell
node-webkit教程(11)Platform Service之shell 文/玄魂 目录 node-webkit教程(10)Platform Service之shell 前言 11.1 She ...
- Spring Data JPA教程,第一部分: Configuration(翻译)
Spring Data JPA项目旨在简化基于仓库的JPA的创建并减少与数据库交互的所需的代码量.本人在自己的工作和个人爱好项目中已经使用一段时间,它却是是事情如此简单和清洗,现在是时候与你分享我的知 ...
- Python基础入门教程,Python学习路线图
给大家整理的这套python学习路线图,按照此教程一步步的学习来,肯定会对python有更深刻的认识.或许可以喜欢上python这个易学,精简,开源的语言.此套教程,不但有视频教程,还有源码分享,让大 ...
随机推荐
- ios7 sdk 新特性
iOS 7 is a major update with compelling features for developers to incorporate into their apps. The ...
- java单例模式使用及注意事项
1. 说明 1)单例模式:确保一个类只有一个实例,自行实例化并向系统提供这个实例 2)单例模式分类:饿单例模式(类加载时实例化一个对象给自己的引用),懒单例模式(调用取得实例的方法如getInstan ...
- 防止横竖屏时,iphone自动缩放的一段js代码
function orientation_change() { var viewport = document.querySelector('meta[name="viewport& ...
- var a=[]; 和 var a=new Array(); 的区别,为什么前者效率高
因为 JSON格式的语法是引擎直接解释的.而new Array 则需要调用Array的构造器.还有就是1.当你需要将一个数字转化为字符串时可以这样定义:var s=""+1; 这样 ...
- HDU4530+模拟
/* */ #include<stdio.h> #include<string.h> #include<stdlib.h> #include<algorith ...
- android TabActivity的局限性 是否还有存在的必要性
TabActivity的局限性 是否还有存在的必要性 其实谷歌有此举动,我们也应该早就想到了,为什么会这么说呢?那就要从TabActivity的原理开始说起了. 做个假定先: 比如我们最外面的Act ...
- Android USB Host 与 Hid 设备通信bulkTransfer()返回-1问题的原因
近期一直在做Android USB Host 与USB Hid设备(STM32FXXX)的通信,遇到了很多问题.项目源码以及所遇到的其他问题可以见本博客其他相关文章,这里重点讲一下bulkTransf ...
- 解析rss和atom文件出现乱码问题
try { String xmlString = new String(response.data, Charset.forName("UTF-8")); XmlPullParse ...
- CSS3中动画属性transform、transition 和 animation
CSS3中和动画有关的属性有三个 transform.transition 和 animation.下面来一一说明: transform 从字面来看transform的释义为改变,使 ...
- memcached实例(enyim.com Memcached Client)
在上一篇文章,我们讲了,为什么要使用memched做为缓存服务器(没看的同学请点这里).下面让我们以memcached-1.2.1-win32版本的服务组件(安装后是以一个windows服务做daem ...