Можно ли ограничить динамические искатели?

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

Легко ли ограничить динамические искатели так, чтобы они все еще могли использоваться внутри службы (одного пакета), но не снаружи?

Я могу себе представить, чтобы перезаписать их, но тогда они также ушли на службу...

2 ответа

Решение

На самом деле не существует простого способа ограничить источник вызовов методов. Вы можете написать глобальное преобразование AST, которое ищет вызовы динамического поиска и запрещает все они, которые не приходят из службы. Если вы разбираетесь в написании AST-преобразований, это не будет чрезмерно сложным, но это не тривиально. Если вы не разбираетесь в написании преобразований AST, то я не рекомендую воспринимать это как ваше первое приключение в этом пространстве. Если честно, я не рекомендую это так или иначе, но это ответ на ваш вопрос. Это можно сделать, но я бы не сказал, что есть легкий путь.

Для CodeNarc существует плагин Grails, который выполняет статический анализ и может не выполнить сборку, если разработчик совершает нарушение.

Есть несколько встроенных правил Grails, но они не делают то, что вы хотите. Вам нужно будет создать собственное правило. Смотрите этот скринкаст.

Наиболее близким из них является, вероятно, GrailsDomainWithServiceReference. Он проверяет, что в классах домена Grails нет введенных классов Service.

Другие вопросы по тегам