im Рефакторинг микросервиса в соответствии с «Чистой архитектурой»:
Каркасы должны быть максимально возможными.Поэтому я использовал шаблон адаптера и инверсию зависимости, чтобы поместить org.springframework.data.repository.CrudRepository
в самый верхний слой.Но как я могу использовать @Entity
(из J ava P ersistence A PI) для сохранения моих сущностей, если Entites находятся в центре, а Frameworks находятся наМаксимальный слой?
Пример: Демо-объект:
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.validation.constraints.NotNull;
@Entity
public class Demo implements Serializable {
@Id
@GeneratedValue
private long id;
@NotNull
private String foo;
}
GenericRepostioryInterface (в слое Usecase)
public interface CrudRepositoryInterface<S,T> {
public <U extends S> U save(U u) ;
public <U extends S> Iterable<U> saveAll(Iterable<U> itrbl) ;
public Optional<S> findById(T id) ;
public boolean existsById(T id) ;
public Iterable<S> findAll() ;
public Iterable<S> findAllById(Iterable<T> itrbl) ;
public long count() ;
public void deleteById(T id) ;
public void delete(S t);
public void deleteAll(Iterable<? extends S> itrbl) ;
public void deleteAll() ;
}
Некоторые варианты использования:
@Autowired
private CrudRepositoryInterface<Demo,Long> demoRepository;
...
private void deleteAll(){
this.demoRepository.deleteAll();
}
...
Адаптер (уровень БД)
public interface DemoRepositoryAdapter extends CrudRepository<Demo,Long>,CrudRepositoryInterface<Demo,Long>{
}
Конфигурация для инъекций (я положил это в пакет / слой БД, а также)
@Configuration
public class InjectRepositoryConfig {
@Bean
public CrudRepositoryInterface<Demo,Long> animalOwnerRepository(@Autowired DemoRepositoryAdapter demoRepositoryAdapter){
return demoRepositoryAdapter;
}
}
Пока все работает нормально, но я не уверен, как удалить / заменить / реорганизовать JPA из основного слоя?
Заранее спасибо