Spring boot - Obiekty biznesowe a użycie repozytoriów spring data

0

Hej
Obejrzałem ostatnio prezentacje Paweła Szulca - Architektura to nie bzdura w której opowiadał m. in. o obiektach biznesowych jako czymś w stylu wrapperów na encje i chcę użyć tego w swoim projekcie. Jedyne co w przykładach był użyty EntityManager, a ja u siebie używam u siebie JpaRepository. Przez to mając klase

public abstract class BusinessObject<T extends Identifiable<K>, K extends Serializable> {

    @NotNull
    protected T entity;

    @NotNull
    protected JpaRepository<T,K> repository;

    public BusinessObject(T entity, JpaRepository<T, K> repository) {
        this.entity = entity;
        this.repository = repository;
    }

    public T attached(){
        return repository.getOne(entity.getId());
    }

    public K getId() {
        return attached().getId();
    }
//hashCode i equals

musze w konstruktorze podawać JpaRepository, z którego dany obiekt ma brać encje co nie jest elegancje z co najmniej dwóch powodów (które ja znalazłem :P). Po pierwsze przy każdej operacji idzie select do bazy (ewentalnie update itp), a po drugie muszę podawać repozytorium przy konstruktorze. I teraz jak to rozwiązać? Mieć specjalne obiekty do tworzenia obiektów biznesowych (juz takie mam do ich tworzenia) z podanymi repozytoriami (przez @Autowire) czy zrobić coś innego?

0
  1. Zawsze możesz sobie wstrzyknąć EntityManagera
  2. Co u ciebie robią te BusinessObjecty bo skoro są tylko wraperami to słabo
0

troche stara ta prezentacja.
lepiej uzywac gdzie sie da repozytoriow niz entity managera.

0
  1. Po pierwsze przy każdej operacji idzie select do bazy (ewentalnie update itp) - nie rozumiem dlaczego tak się dzieje, jeżeli chcesz coś zrobić na obiekcie któryy opakowujesz ..encji to tak musi być
  2. a po drugie muszę podawać repozytorium przy konstruktorze. I teraz jak to rozwiązać? to je sobie wstrzyknij, AutowireCapableBeanFactory factory;factory.autowireBean

I na koniec poszukaj sobie przykładów w necie DDD

0

Po pierwsze przy każdej operacji idzie select do bazy (ewentalnie update itp) - nie rozumiem dlaczego tak się dzieje, jeżeli chcesz coś zrobić na obiekcie któryy opakowujesz ..encji to tak musi być

To nie jest prawda. Jeśli używasz JPA, EntityManager jest warstwą pośredniczącą. Dopóki nie "zsynchronizujesz" stanu obiektu z bazą danych do tego czasu zapytanie nie leci do bazy. Innymi słowy możesz zmienic atrybut obiektu zarządzanego, ale nie będzie to równoznaczne z "UPDATE" wykonywanym od razu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1