Я работаю с Crud и Spring MVC и зацикливаюсь на дублировании одного и того же кода в разных репозиториях;
fe, если я использую клиентов, элементы и логины, которые у меня есть
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));
}
}