Crud и Услуги
Я работаю с Crud и Spring MVC и зацикливаюсь на дублировании одного и того же кода в разных репозиториях;
например, если я использую клиентов, предметы и логины, которые у меня есть
public interface CustomerRepository extends CrudRepository<Customer, Long>{
}
но с Item у меня есть то же самое:
public interface ItemRepository extends CrudRepository<Item, Long>{
}
Кроме того, в репозиториях есть такие же методы, как findAll(), findDistinctBy...(), deleteAll() и т. Д.
Как я знаю, хорошей практикой является избежание дублирования кода, но где я должен это сделать? В сервисе использовать специальный сервисный интерфейс и реализовать его по специальному классу, а затем специализировать сервис для каждой сущности? Или я должен сделать это в моем собственном репозитории, как было сказано в официальной справочной документации Spring Data JPA, ссылка на весенние данные $ 4.3.1?
Мой вариант кода с сервисом ниже. Общий интерфейс для всех сущностей
import org.springframework.data.repository.CrudRepository;
public interface MyCrudService<T>{
<S extends CrudRepository<T, Long>> Iterable<T> findAll(S s);
}
Общий класс, который реализует сервис
import org.springframework.data.repository.CrudRepository;
public class MyCrudServiceImpl<T> implements MyCrudService<T>{
@Override
public <S extends CrudRepository<T, Long>> Iterable<T> findAll(S s) {
return s.findAll();
}
}
Специальный класс обслуживания для объекта Unit
@Service
@Transactional
@AllArgsConstructor
public class MyUnitServiceTwo{
UnitRepository unitRepository;
MyCrudServiceImpl crudService;
public List<Unit> findAll1() {
return Lists.newArrayList(crudService.findAll(unitRepository));
}
}