`
热带翎羽
  • 浏览: 64744 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Grails原生的scaffolding的改进设想

阅读更多
Grails原生的scaffolding机制所生成的代码主要用于模型验证,在实际中基本无法直接在项目中使用,主要原因如下:

  • 生成的CRUD中的代码过于简单,不包含:搜索(Ajax)、Tooltip、表单分组/分栏等
  • Domain模型中没有包含对所生成的View层代码的控制信息和基础信息
  • 现有的Domain模型,如果通过attributes进行自定义的扩展不符合Grails的整体思路
  • 无法实现单一模型对多个View的情况,如:针对互联网版本和针对手机客户端版本


针对以上问题,如果可以通过引入Domain元数据的方式,通过元数据中的基础信息和控制信息,生成相互联系的Gomain/Controller/Views将一定程度上提升开发的效率,具体的思路如下:




元数据定义示例:

book.groovy

class Book {
	static domain=[name:"Book", chinese:"书籍"]
	static fields=[
		[type: "String", name:"name", chinese:"书名", tooltip:"请输入书籍名称"],
		[type: "Author", name:"author", chinese:"作者", tooltip:"请输入作者姓名", hasMany:true]
	]
	static views=[list:[template:"simpleList",ajaxSearch:true]
         ]
}


实现思路:

  • 通过GroovyScriptEngine动态加载所需生成对象以及所关联对象的的元数据
  • 通过GStringTemplateEngine加载模板,并生成:Domain定义、Controller和Views


Domain模板:
// 作者: bruce.lin.chn@gmail.com
// 时间: $date

package $domain.pkg

//模型: $domain.chinese
class $domain.name {<% fields.each{key,value -> %>
    $value.type    $key     //$value.chinese <% } %>

    static constraints = {<% fields.each{key,value -> %>
        $key($value.constraintsString)<% } %>
    }

    String toString()
    {
        "$domain.chinese"+"实例"
    }
}

Generator代码片段:
//  Author: bruce.lin.chn@gmail.com
//  Date: 2010-10-17
//  Time: 12:37:10

import groovy.text.TemplateEngine
import groovy.text.Template
import groovy.text.GStringTemplateEngine

outputPath="./output"
generatingClasses=["Book"]

String[] loadingPaths = ['./input']

engine = new GroovyScriptEngine(loadingPaths)

generatingClasses.each{className->
    clazz = engine.loadScriptByName(className+'.groovy')
    instance = clazz.newInstance()

    instance.domain.each{ key, value ->
        println "    "+key+":"+value
    }
    
    instance.fields.each{ key, value ->
        println "    "+key+":"+value
    }

    instance.fields.each{ key, value ->
        value.constraintsString=""
        value.constraints.each{ckey,cvalue->
            if(value.constraintsString !="")
            {
                value.constraintsString+=","
            }
            value.constraintsString+=ckey+":"+cvalue.toString()
        }
    }

    //Generating domain source code
    File templateFile = new File("templates/domain.template");
    TemplateEngine templateEngine = new GStringTemplateEngine();
    Template template = templateEngine.createTemplate(templateFile);

    println template.make(date:new Date(),domain:instance.domain,fields:instance.fields)
}


生成的domain代码:

// 作者: bruce.lin.chn@gmail.com
// 时间: Sun Oct 17 21:31:27 CST 2010

package application.

//模型: 书籍
class Book {
    String    name     //书名 
    String    author     //作者 

    static constraints = {
        name(size:2..20,blank:false)
        author(size:2..20,blank:false)
    }

    String toString()
    {
        "书籍"+"实例"
    }
}
  • 大小: 47.8 KB
1
0
分享到:
评论

相关推荐

    Grails自定义scaffolding模板

    **Grails自定义scaffolding模板** 在Grails框架中,scaffolding是一种快速开发工具,它能够自动为数据模型生成基本的CRUD(创建、读取、更新、删除)操作界面,极大地提高了开发效率。然而,Grails的默认...

    Grails视频教程1

    Grails视频教程:A screencast that demonstrates Grails' scaffolding feature

    Grails Grails Grails

    **Grails 框架详解** Grails 是一个基于 Groovy 语言的开源Web应用程序框架,它构建在Java平台之上,旨在简化开发过程并提高生产力。Grails 的设计深受Ruby on Rails的影响,提供了MVC(模型-视图-控制器)架构模式...

    Grails权威指南 Grails权威指南

    《Grails权威指南》是一本全面深入探讨Grails框架的专著,旨在帮助读者掌握这一强大的Web开发工具。Grails是一种基于Groovy语言的开源框架,它为构建现代、高效的应用程序提供了简洁高效的解决方案。本指南针对不同...

    Eclipse下搭建Grails项目

    【Grails项目搭建详解】 Grails是一个基于Groovy语言的开源Web应用框架,它简化了开发过程,尤其适合快速构建动态网站。在Eclipse中搭建Grails项目可能相对复杂,但通过以下步骤,即使是初学者也能顺利进行。 1. *...

    grails-用户手册

    《Grails用户手册》 Grails,作为一个基于Groovy语言的开源Web应用框架,深受开发者喜爱,它简化了Java开发的复杂性,提供了强大的MVC(Model-View-Controller)架构,以及丰富的插件系统。这份用户手册将帮助你...

    grails-3.0.5-ga (2/2)

    在Grails 3.0.5版本中,引入了许多改进和新特性,使得这个版本成为一个重要的里程碑。以下是关于"grails-3.0.5-ga (2/2)"的详细知识点: 1. **Groovy语言**: Grails框架是用Groovy语言编写的,这是一种动态、面向...

    Grails权威指南.pdf

    - **Scaffolding**:Grails提供快速生成基础CRUD操作的模板代码,加速应用开发。 - **Plugins**:Grails插件系统允许开发者复用和扩展功能,如安全、缓存、邮件服务等。 - **配置管理**:通过`grails-app/conf/`...

    grails开发

    - 使用Scaffolding快速生成CRUD操作 - 利用Grails的拦截器(Filters)进行全局操作 - 编写清晰的Service层代码,保持Controller轻量 - 定期运行静态代码分析工具,提升代码质量 通过上述内容,我们可以看到...

    eclipse开发grails插件

    对于Grails开发,我们需要的是Eclipse中的Grails插件,它能够提供对Grails项目的创建、运行、调试等一系列功能。 **Grails**是基于Groovy语言的全栈式Web开发框架,它借鉴了Ruby on Rails的设计理念,提供了快速...

    grails-1.3.0.RC2

    10. **Scaffolding**:Grails 的快速原型功能(scaffolding)能自动生成基本的CRUD界面,帮助开发者快速搭建应用的基础结构。 在研究 `grails-1.3.0.RC2` 源代码时,开发者可以深入了解Grails框架的架构,学习如何...

    grails-2.4.4

    **Grails 2.4.4 SDK 深度解析** `Grails 2.4.4` 是一个基于 `Groovy` 语言构建的开源Web应用框架,它旨在简化开发流程并提供丰富...不断进化的Grails框架,通过持续的改进和新特性,保持了其在现代Web开发中的竞争力。

    grails 3.3.2 资源下载

    Grails 3.3.2是该框架的一个稳定版本,提供了许多改进和新特性,以提升开发者的体验和应用性能。 1. **Groovy语言**: Grails 的核心就是Groovy语言,它是一种动态、类型安全的编程语言,与Java语法兼容,但更加简洁...

    grails中文入门简介

    Grails是一个基于Groovy语言的全栈框架,它遵循约定优于配置的原则,并且紧密集成Spring和Hibernate等流行的Java库,简化了开发流程。Grails在IT行业中尤其受到重视,因为它能够帮助开发者快速搭建并部署基于MVC模式...

    grails快速开发web

    ### Grails 快速开发 Web 应用程序 #### 一、Grails 概述 Grails 是一种基于 Groovy 的开源应用框架,用于简化 Web 应用程序的开发过程。它采用约定优于配置的原则,这使得开发者可以更快地创建功能丰富的 Web ...

    grails-1.2.2.zip

    Grails 1.2.2是该框架的一个重要版本,它在1.x系列中扮演了承上启下的角色,引入了许多改进和新特性,进一步提升了开发者的生产力。 首先,我们来了解一下Grails的核心特性。Grails是基于MVC(Model-View-...

    grails-2.4.4.zip

    《Grails 2.4.4 框架深度解析》 Grails 2.4.4 是一个基于Java的开源Web应用框架,它利用Groovy语言的强大特性,为开发者提供了一种高效、灵活的开发环境。这个压缩包“grails-2.4.4.zip”包含了完整的Grails 2.4.4...

    Grails中文参考手册

    **Grails 概述** Grails 是一个基于 Groovy 语言的开源 web 应用程序框架,它构建在 Java 平台上,旨在提高开发效率,简化常见 Web 开发任务。Grails 遵循 Model-View-Controller (MVC) 架构模式,允许开发者快速...

Global site tag (gtag.js) - Google Analytics