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

Odpowiedz Nowy wątek
2017-04-30 17:14
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?


Spring? Ja tam wole mieć kontrole nad kodem ᕙ(ꔢ)ᕗ
edytowany 1x, ostatnio: danek, 2017-04-30 17:15

Pozostało 580 znaków

2017-04-30 17:20
0
  1. Zawsze możesz sobie wstrzyknąć EntityManagera
  2. Co u ciebie robią te BusinessObjecty bo skoro są tylko wraperami to słabo
wszelką logikę biznesową, zależy od przypadku. Zamyka dostęp do bezpośrednio setterów i getterów a na zewnątrz wystawia tylko to co potrzebne - danek 2017-04-30 17:23
No ale obiekt BusinessObject wystawia metodę publiczną attached kótra daje dostęp do encji - Szczery 2017-04-30 21:11
jest to jeszcze do przemyślenia ;) - danek 2017-04-30 21:42
powinno być protected - danek 2017-04-30 21:45

Pozostało 580 znaków

2017-04-30 21:58
Biały Mleczarz
0

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

właśnie dlatego pytam, jak to połączyć ;) - danek 2017-04-30 22:00

Pozostało 580 znaków

2017-05-01 07:35
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

Pozostało 580 znaków

2017-05-01 08:21
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.

dobrze wiedzieć, dzięki ;) - danek 2017-05-01 13:13

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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