`

Grails最佳实践

阅读更多

查看英文原文:Grails Best Practices 

我在IntelliGrape工作,这是一家专门使用Groovy & Grails进行开发的公司。本文是我们Grails项目遵循的最佳实践的基本清单,收集自邮件列表、Stack Overflow、博文,播客IntelliGrape的内部讨论。它们分为控制器、服务、Domain、视图、TagLib、测试和其他。

这里的建议是专门针对Grails 2.0的,尽管其中的大多数是多个版本都适用的。

控制器

  1. 不允许控制器充当其他角色。控制器的角色就是接受传入的请求、检查权限等、问Domain或Service要结果、将结果用所需的格式(如 HTML、JSON或XML)返回给请求者。要让控制器保持苗条。别让它执行业务逻辑、查询或更新。
  2. 如果一个控制器代表了一个单一的Domain Class,使用标准的命名公式“<DomainClass>Controller”为控制器命名。
  3. 避免代码重复 - 通用的操作应该提取成闭包或者方法。更多信息参见这篇博文
  4. 将复杂的数据绑定划分为一个Command对象。可以让Command对象丰富些(就像富Domain Class)。创建一个有层次的Comand对象在某些情况下也是有用的。

服务

  1. 服务是复杂业务逻辑或粗粒度代码的最佳候选。如果有必要,服务API可以很容易的暴露成一个RESTful/SOAP Web服务。
  2. 服务缺省为事务性的,但是如果服务的方法没有更新持久化存储,可以设置为非事务性的。

视图

  1. 尽量保持视图的简单 - 在这一层,抵制放置业务或数据库逻辑的诱惑。
  2. 使用布局(Layout)保证应用的所有页面或者页面子集有一个统一的外观。
  3. 让你的视图保持DRY(别重复你自己)。将重复内容放在模板中。
  4. 对通用的UI元素,使用自定义的TagLib。

Domain

  1. 最好将模型Domain特定的逻辑放在自己的Domain中。符合“单个Domain加少数依赖”的任何代码都应该被放到自己的Domain Class里。但仅限于那个Domain相关的逻辑,处理多个Domain的更复杂业务逻辑属于服务。
  2. 为了重用公共局部查询或者分解复杂逻辑,使用命名查询,并根据需要把它们组合起来,就像常见的jQuery函数链式调用一般。
  3. 别在Domain文件夹下混入其他的通用工具类或数值对象,它们应该呆在src/groovy目录下。如果这些类需要支持验证,可以用@Validateable对其进行注解。
  4. 使用有意义的构造函数实例化Domain对象,避免任何不必要的状态并只构造有效的对象。

TagLib

  1. 保持各标签的精简。一个标签可以调用其他标签,如果需要,一个标签可以分解成可重用的子标签。
  2. TagLib可以被认为是MVC架构中视图层的一部分,但深入Domain内部组装或者格式化数据显示也是可以接受的。依旧遵循(即不是完全禁止)最小化与Domain直接交互的原则。
  3. 它应该包含更多的逻辑,而非渲染;虽然有少许渲染还是不错滴。
  4. 为了更好的组织结构,可以使用多个自定义的TagLib。

测试

  1. 较之集成测试,更偏爱单元测试。不仅因为它们运行/调试更快,而且能更好地强制松耦合。服务的测试比较特殊,使用集成测试会更好些。
  2. 在单元测试中,使用save(validate:false)保存没有完全装入的对象。

Config.groovy

  1. 将所有环境特定的配置放在Config.groovy,如serverURL、每个环境下各异的常量等等。
  2. 将个人配置内容(比如本地数据库用户名或密码等等)放在<Local>Config.groovy文件中,并加入到版本控制系统的忽略列表中,以便每个团队成员能够根据自己的特定需求覆盖配置。
  3. 虽有些争议,但我们建议设置grails.gorm.failOnError = true,这样只要保存对象时Domain校验失败就会抛出一个异常。由此,你就不再需要检查是否保存成功。
  4. 在Grails 2.0中,缺省“grails.hibernate.cache.queries = true”,毋须添加cache:true就会自动缓存查询。把它设为false,只在真正有助于提高性能时才缓存。

杂项

  1. 理解并坚持Grails的惯例,因为Grails就是惯例驱动的。使用这些惯例会让你的开发者生活更轻松。
  2. 在不同的包中组织Grails的制品,别用com.businessname.appname.domaincom.businessname.appname.controller。否则在FooController中,我们将最终需要导入Foo类。 既然Grails已经将这些制品放在了不同目录下,它们就不需要再被分离了。可以参考这篇博文
  3. fixtures插件可以在开发时用来初始化数据。
  4. 将你应用的可重用部分开发成Grails插件。这些插件可以独立测试,还可以消除你的应用的复杂性。如果你认为其他人会需要这些插件,你还可以把插件发布到公共的插件库中。
  5. 更新脚手架模板以生成你的项目特定的视图和控制器。
  6. 青睐动态脚手架,而不使用静态脚手架,除非前者不满足你的需求。例如,如果仅需要修改“save” action,你可以仅重载“save” action,在运行时动态生成其他脚手架代码。
  7. 总在DataSource.groovy中设置数据库的重连属性是很好的习惯。
  8. 总保证自己应用中含有一个外部的配置文件(那怕是一个空文件),这样,在产品环境中需要覆盖任何配置时都无需重新生成一个新的WAR文件。
  9. 如果你想对你所使用的插件进行小的改动,例如改变quartz监控插件的list.gsp以符合应用主题,那么不要因为这点小改动而把插件源代码包含到项目里,你可以遵循相同的目录结构或包重载这些文件。原因是应用的优先级比插件高。
  10. Domain中所有自定义的校验可以放在一个共享的校验文件中,以便其他Domain重用这些约束。参见这里的示例
  11. 在应用中安装任何的插件,最好在BuildConfig.groovy文件中声明,而不是使用install-plugin命令。请看这个线索了解详情。

我还漏了什么吗?你们的项目或组织中遵循哪些Grails开发的最佳实践?可以通过评论分享出来,以便将来丰富本文的内容。你也直接直接访问我的网站 java进阶 http://www.javady.com/index.php/category/bingfa

直接在上面进行留言即可.


6
1
分享到:
评论
1 楼 qcyycom 2012-05-12  
 

相关推荐

    GrailsA QuickStart Guide

    10. **Grails最佳实践** 提供一系列开发最佳实践,包括代码组织、错误处理、日志记录和安全性建议。 总之,“Grails A QuickStart Guide”将帮助你快速掌握Grails框架,从创建第一个应用到构建复杂的业务系统。这...

    Grails权威指南 Grails权威指南

    通过《Grails权威指南》,你可以学习到如何利用Grails的强大功能来开发高效、可扩展的Web应用,同时也了解到如何利用Groovy语言和Grails框架的最佳实践,提升你的开发技能。这本书深入浅出地讲解了Grails的各个方面...

    grails-2.4.4.zip

    在实际开发中,了解并遵循Grails的最佳实践至关重要,例如,合理划分领域模型、充分利用GSP标签库、使用Service层处理业务逻辑等,能有效提高代码质量和维护性。 总结,Grails 2.4.4 作为一个成熟的Web开发框架,...

    Eclipse下搭建Grails项目

    【Grails项目搭建详解】 Grails是一个基于Groovy语言的开源Web应用框架,它简化了开发过程,尤其适合快速构建动态网站。在Eclipse中搭建Grails项目可能相对复杂,...不断更新插件和学习最佳实践将有助于提升开发体验。

    Grails企业web应用开发与部署

    《Grails企业Web应用开发与部署》 在现代软件开发领域,Grails作为一个基于Groovy语言的开源Web应用框架,以其高效、灵活和强大的特性深受开发者...在实际工作中,结合最佳实践,能够进一步提升开发效率和应用性能。

    Grails技术精解与Web开发实践.pdf

    此书的出版时间为2009年9月,提醒读者注意:技术是一个快速发展的领域,随着时间的推移,一些技术细节和最佳实践可能会有所变化。因此,在阅读这样的书籍时,建议将书中的知识和最新技术动态结合起来,以确保所学的...

    Grails中文参考手册

    "Grails 中文参考手册" 是一套详细的 Grails 学习资料,涵盖了框架的所有核心组件、最佳实践和使用方法,帮助开发者快速掌握 Grails 开发技能。 总之,Grails 是一个强大而灵活的 Web 开发框架,结合 Groovy 的优点...

    grails 中文文档+grails-fckeditor-0.9.5.zip插件

    1. 学习入口:对于中文开发者来说,中文文档降低了学习Grails的门槛,帮助理解和掌握Grails的基本概念、框架结构、开发工具以及最佳实践。 2. 快速上手:文档通常包含安装指南、教程、API参考等,为开发者提供从零...

    Grails从入门指南(第二版)

    《Grails从入门指南(第二版)》是一...这本书是Grails新手的必备读物,它不仅覆盖了基础概念,还包含了实用的开发技巧和最佳实践。通过深入阅读并实践书中的例子,你将能够熟练地使用Grails构建高效、可维护的Web应用。

    Grails1.1中文文档

    通过阅读这份《Grails 1.1 中文文档》,开发者能够全面理解Grails框架的架构、工作原理和最佳实践,从而高效地开发出高质量的Web应用。尽管版本已经是1.1,但很多核心概念和设计原则在后续版本中仍然适用,对于学习...

    grails开发

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

    Grails权威指南.pdf

    - **Testing**:书中会讲解单元测试、集成测试和功能测试的最佳实践。 - **Security**:如Spring Security插件的使用,保护应用程序的安全。 - **Deployment**:包括本地、测试环境和生产环境的部署策略。 通过...

    Groovy轻松入门—Grails实战基础篇

    10. **最佳实践与案例研究**:通过实际项目案例,学习如何在Grails中应用最佳实践,如代码组织、模块化设计、错误处理和日志记录等。 综上所述,“Groovy轻松入门—Grails实战基础篇”将带你走进Groovy和Grails的...

    grails-5.1.2.zip

    总的来说,Grails 5.1.2是一个成熟的框架,旨在提供一个高效、灵活的开发环境,通过集成最新技术和最佳实践,帮助开发者快速构建高质量的Web应用。无论是对于初学者还是经验丰富的开发人员,这个版本都提供了许多...

    grails in action

    10. **最佳实践与案例研究**:《Grails in Action》很可能包含实际项目案例,展示如何在不同场景下应用Grails,分享最佳实践和技巧。 通过阅读这本书,读者将不仅掌握Grails框架的使用,还能了解到现代Web应用开发...

    grails 入门 大全

    通过这份《Grails 入门大全》的学习,你将能够理解 Grails 的核心概念,掌握基本的开发流程,进一步深入探索 Grails 的高级特性和最佳实践。无论是初学者还是有经验的开发者,都能从中受益,提升开发效率,创建出...

    Grails安装SVN客户端插件指导手册

    在IT行业中,Grails是一个基于Groovy语言的开源Web应用框架,它简化了Java平台上的开发流程。在Grails项目中,版本控制是至关重要...这对于任何Grails项目来说都是一个必不可少的工具,有助于实现代码管理的最佳实践。

Global site tag (gtag.js) - Google Analytics