1.Просто используйте репозиторий только при необходимости -> Вы должны создавать и использовать его только тогда, когда это необходимо;Все в порядке.В общем, хорошей практикой является не создавать что-либо, если вам это действительно не нужно.
2.Используйте класс Service и используйте этот -> Service - это просто класс, где вы пишете свою бизнес-логику, извлекая некоторые данные из классов репозитория (уровень объекта доступа к данным DAO);Это хорошая практика, чтобы держать их отдельно;так что любое изменение в DAO или сервисе не должно влиять друг на друга.
3.Интерфейс обслуживания пользователя и реализовать его и использовать реализацию.
В общем, вы код в терминах интерфейса;его хорошая практика проектирования и кодирования;таким образом, вы создаете свободную пару кода;поэтому, когда бы вы ни использовали Сервис, вы внедряете его как тип интерфейса и его подчеркнутую реализацию, которую вы можете подключить и отключить;Конечно, если есть несколько реализаций для вашего Сервисного интерфейса.Например, у вас есть две разные реализации для вашего интерфейса ShapeService для двух разных клиентов, чтобы вычислить Area, в которой один клиент заинтересован, чтобы вычислить площадь Recatangle, тогда как другой находится в Square.Так что в этом случае, если вы создаете интерфейс службы и его Impl;вы можете оставить логику нетронутой или неизменной для класса, где будет использоваться этот интерфейс службы.Также в будущем, если будет много реализаций формы, ее будет легко изменить;ваш дизайн кода будет открыт для расширения, но закрыт для модификации.
Я бы порекомендовал, если у вас есть одна реализация для класса обслуживания, затем перейдите непосредственно к классу вместо создания интерфейса Service и затем отдельного класса Impl;