grails-CodeNarc和Service Stateless ruleSet

时间:2012-02-07 11:05:39

标签: grails grails-plugin grails-domain-class codenarc

我正在尝试在grails项目上使用codeNarc,在安装并运行它后,我有一些规则集违规消息,我想了解和解决。第一个关注“GrailsS​​tatelessService”,第二个关注“equals()和toString()”方法......

对于第一个“GrailsS​​tatelessService”,我收到的消息是:

***************************
Violation in class app.TheServiceName. The class is marked as stateless but contains the non-final field 'aVariableName'
***************************

我对此进行了一些搜索,但没有找到很多关于此的技巧。有人可以解释一下这个规则集的真正含义以及解决这个问题我必须做些什么/

关于第二种规则集我发现它通过覆盖所有域类中的那些方法来解决它但是有义务,需要,或者我只需要修改ruleSet文件以避免那些类型的消息那些规则集?

这引入了我的最后一个问题:在哪里可以找到这个规则集文件(codenarc中的默认文件)或者我必须包含自己的那个?

5 个答案:

答案 0 :(得分:3)

我发现GrailsStatelessService规则有时会发现真正的违规行为,因此我修改它以忽略常用的字段名称,而不是禁用它。

BuildConfig.groovy:

codenarc.propertiesFile = 'grails-app/conf/codenarc.properties'

codenarc.properties:

GrailsStatelessService.addToIgnoreFieldNames=grailsApplication,applicationContext,sessionFactory

答案 1 :(得分:3)

我可以按如下方式配置此CodeNarc规则:

  1. 安装CodeNarc插件[ grails install-plugin codenarc ]

  2. BuildConfig.groovy 文件中添加以下行[有关详细信息配置]:

    codenarc.propertiesFile = 'grails-app/conf/codenarc.properties'
    
  3. codenarc.properties - 文件中,我添加以下规则以忽略少量规则

    codenarc.properties = {
    
      GrailsDomainHasEquals.enabled = false
    
      GrailsDomainHasToString.enabled = false
    
      EmptyMethod.enabled = false
    
    }
    
  4. 运行以下命令以生成CodeNarc报告:grails codenarc

答案 2 :(得分:1)

documentation很好地解释了这条规则:

  

检查Grails服务类上的非最终字段。 Grails服务   默认情况下,类是单例,因此它们应该是可重入的。在   大多数情况下,这意味着(或至少鼓励)他们应该这样做   无状态的。

     

此规则忽略最终字段(实例或静态)。字段   然而,这是静态的和非最终的,确实会导致违规。

答案 3 :(得分:1)

有时会出现混乱。如果您不使用无状态类,但Codenarc认为,则在服务名称末尾添加Service会删除此“问题”。我对此服务有此问题:

private CurrencyConverterFactory currencyConverterFactory

我固定为:

private CurrencyConverterFactory currencyConverterFactoryService

我希望这对某人有帮助。

答案 4 :(得分:0)

如果您使用的是 Grails CodeNarc插件,请参阅插件文档,以获取默认包含的 CodeNarc 规则集列表。还有一节“配置CodeNarc RuleSet文件” - 所以一定要创建自己的自定义规则集。

http://www.grails.org/plugin/codenarc/

您需要自定义适合您的团队/项目的规则集。除了“基本”规则之外,其他提供的规则集都包含可能适合您的规则。

GrailsDomainHasToString GrailsDomainHasEquals 规则是完美的示例 - 许多组织都禁用这些规则。

有关关闭规则的详情,请参阅 CodeNarc 文档:

http://codenarc.sourceforge.net/codenarc-configuring-rules.html