Crud и Услуги - PullRequest
       6

Crud и Услуги

0 голосов
/ 26 сентября 2018

Я работаю с 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));
    }
 }
...