Подтвердить что ты не робот

Разница между grails-app/services, grails-app/utils и src-папками

Я пытаюсь прикрыть, какая разница между этими тремя папками и чем я должен их вкладывать.

В настоящее время я бросаю класс, интерфейсы и что-то еще, что напрямую связано со структурой моих классов домена (путем расширения или реализации) в папку src. Все, что связано с дополнительной транзакционной логикой, превосходящей по умолчанию контроллер Grails, я помещал в папку grails-app/services. Наконец, любой класс, который содержит "вспомогательные" методы (например, сравнение различных вещей, специальных операций с строками и т.д.), Я помещал в папку grails-app/utils.

Если я пропустил отметку для использования этих папок, пожалуйста, поставьте меня на правильный путь.

4b9b3361

Ответ 1

Это довольно близко. grails-app/utils для классов Codec - это странно названо и недокументировано. Я переместил вспомогательные классы обратно в src/ groovy.

Использование сервисов для выполнения транзакционных работ замечательно, но вы также можете использовать службы для не транзакционных методов. Добавьте static transactional = false к классам служб, у которых есть служебные методы, которые не требуют транзакций. Обратите внимание, что в контроллерах нет транзакций, поэтому вы должны перенести все упорства на транзакционные службы.

Статические утилиты в вспомогательном классе src/ groovy и не-транзакционные методы в сервисе в значительной степени эквивалентны, поэтому для меня решение о том, какой маршрут принять, сводится к зависимостям. Если класс зависит от Spring beans, сделайте его услугой и обратитесь к ним через инъекцию зависимости. В противном случае просто сделайте его вспомогательным классом.

Ответ 2

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

Это упрощает размещение ваших классов домена в плагине, так что вы можете расширить функциональность, создав несколько приложений с использованием той же модели домена, а не создавая неподъемный большой шар грязи. Он также согласуется с моделью приложения, описанной дядей Бобом Мартином в "Потерянных годах архитектуры" http://www.youtube.com/watch?v=WpkDN78P884

Учитывая, что вы думаете об архитектуре, было бы неплохо прочитать некоторые работы дяди Боба и Мартина Фаулера.