im Refactoring a Microservice according to Clean Architecture:
Frameworks should be at the utmost layer. So i used the Adapter Pattern and Dependency Inversion to put org.springframework.data.repository.CrudRepository
at the utmost layer. But how can i use @Entity
(from Java Persistence API) to persist my Entitys if Entites are in the center and Frameworks are at the utmost layer?
Example: Demo-Entity:
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 (in the Usecase Layer)
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() ;
}
Some usecase:
@Autowired
private CrudRepositoryInterface<Demo,Long> demoRepository;
...
private void deleteAll(){
this.demoRepository.deleteAll();
}
...
Adapter (DB Layer)
public interface DemoRepositoryAdapter extends CrudRepository<Demo,Long>,CrudRepositoryInterface<Demo,Long>{
}
Config for Injection (i put that in the DB Package/Layer aswell)
@Configuration
public class InjectRepositoryConfig {
@Bean
public CrudRepositoryInterface<Demo,Long> animalOwnerRepository(@Autowired DemoRepositoryAdapter demoRepositoryAdapter){
return demoRepositoryAdapter;
}
}
this Works fine so far but im unsure how to remove / replace / refactor JPA out of the core layer?
Thanks in advance
Aucun commentaire:
Enregistrer un commentaire