Grails-CodeNarc и Service Stateless ruleSet

Я пытаюсь использовать codeNarc в проекте Grails, после его установки и запуска у меня есть несколько сообщений о нарушениях правил, которые я хотел бы понять и устранить. Первый касается "GrailsStatelessService", а второй - методов "equals() и toString()"...

Для первого "GrailsStatelessService" я получил следующее сообщение:

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

Я немного искал об этом, но не нашел много трюков по этому поводу. Может кто-нибудь объяснить мне, каково реальное значение этого набора правил и что мне нужно сделать, чтобы решить эту проблему/

О втором типе набора правил я где-то нашел, что он решается путем переопределения этих методов во всех классах предметной области, но это обязательство, необходимость или мне просто нужно изменить файл набора правил, чтобы избежать сообщений, связанных с этими наборами правил. ?

И это вводит мой последний вопрос: где найти этот файл набора правил (по умолчанию в codenarc) или тот, который я должен включить сам?


person KAdjevi    schedule 07.02.2012    source источник


Ответы (5)


Я обнаружил, что правило GrailsStatelessService иногда улавливает реальное нарушение, поэтому вместо того, чтобы отключать его, я модифицирую его, чтобы игнорировать часто используемые имена полей.

BuildConfig.groovy:

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

codenarc.properties:

GrailsStatelessService.addToIgnoreFieldNames=grailsApplication,applicationContext,sessionFactory
person doelleri    schedule 07.02.2012
comment
Точно так же это работало для меня для Grails 2.0 (в BuildConfig.groovy): codenarc.properties = { GrailsPublicControllerMethod.enabled = false GrailsStatelessService.addToIgnoreFieldNames = 'grailsApplication,messageSource,*Dao' } - person Daniel Bower; 18.06.2013

Я могу настроить эти правила 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

person abanmitra    schedule 11.12.2012

документация хорошо объясняет это правило:

Проверяет неконечные поля в классе обслуживания Grails. Классы служб Grails по умолчанию являются одноэлементными, поэтому они должны быть реентерабельными. В большинстве случаев это подразумевает (или, по крайней мере, поощряет), что они должны быть лицами без гражданства.

Это правило игнорирует конечные поля (экземплярные или статические). Однако поля, которые являются статическими и неконечными, вызывают нарушение.

person tim_yates    schedule 07.02.2012

Иногда condenarc смешивает вещи. Добавление службы в конце имени службы устраняет эту «проблему», если вы не используете класс как не имеющий состояния, но codenarc так считает. У меня была эта проблема с этой службой:

private CurrencyConverterFactory currencyConverterFactory

И я исправил с:

private CurrencyConverterFactory currencyConverterFactoryService

Я надеюсь, что это поможет кому-то.

person GSAN    schedule 05.02.2019

Если вы используете подключаемый модуль Grails CodeNarc, см. в документации подключаемого модуля список наборов правил CodeNarc, которые включены по умолчанию. Существует также раздел «Настройка файла (файлов) набора правил CodeNarc», поэтому обязательно создайте свой собственный набор правил.

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

Ожидается, что вы настроите набор правил, подходящих для вашей команды/проекта. Помимо «базового» набора правил, все другие предоставленные наборы правил содержат правила, которые могут подходить или не подходить для вас.

Прекрасными примерами являются правила GrailsDomainHasToString и GrailsDomainHasEquals — многие организации отключают эти правила.

Дополнительную информацию об отключении правила см. в документации CodeNarc:

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

person Chris Mair    schedule 07.02.2012