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));
    }
 }

0 ответов

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