【问题标题】:grails-CodeNarc and Service Stateless ruleSetgrails-CodeNarc 和服务无状态规则集
【发布时间】:2012-02-07 11:05:39
【问题描述】:

我正在尝试在 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'
***************************

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    BuildConfig.groovy:

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

    codenarc.properties:

    GrailsStatelessService.addToIgnoreFieldNames=grailsApplication,applicationContext,sessionFactory
    

    【讨论】:

    • 同样,这对我来说适用于 Grails 2.0(在 BuildConfig.groovy 中):codenarc.properties = { GrailsPublicControllerMethod.enabled = falseGrailsStatelessService.addToIgnoreFieldNames = 'grailsApplication,messageSource,*Dao'}
    【解决方案2】:

    我可以按如下方式配置此 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

    【讨论】:

      【解决方案3】:

      有时 condenarc 会混淆。如果您没有将类用作无状态类但 codenarc 认为如此,则在服务名称的末尾添加 Service 会删除此“问题”。我在使用此服务时遇到了这个问题:

      private CurrencyConverterFactory currencyConverterFactory
      

      我修复了:

      private CurrencyConverterFactory currencyConverterFactoryService
      

      我希望这对某人有所帮助。

      【讨论】:

        【解决方案4】:

        documentation 很好地解释了该规则:

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

        此规则忽略最终字段(实例或静态)。字段 但是,它们是静态且非最终的,确实会导致违规。

        【讨论】:

          【解决方案5】:

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

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

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

          GrailsDomainHasToStringGrailsDomainHasEquals 规则就是完美的例子——许多组织禁用了这些规则。

          有关关闭规则的更多信息,请参阅 CodeNarc 文档:

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

          【讨论】:

            猜你喜欢
            • 2014-07-04
            • 1970-01-01
            • 2018-11-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多