DDD, pobieranie encji z repozytorium i walidacja

0

Mamy jakiś serwis, który pobiera encję z repozytorium i wykonuje na niej jakąś logikę. Encja składa się z np. 10 value objectów i każdy z nich ma mniej lub bardziej skomplikowaną walidację. Encja w repozytorium przed pobraniem jest mapowania np. z encji hibernetowej na encję domenową i w czasie tego mapowania uruchamiają się walidatory value objectów i tutaj jest problem, bo skoro encja już była zapisana w repozytorum, to siłą rzeczy musi być poprawna i ta walidacja jest zbędną, ale teraz pytanie: jak w takim razie pominąć ją? Jedna spraw to bezsens takiej walidacji a druga wydajność. Czy jest sens się tym przejmować?

0

Nigdy w życiu nie widziałeś bazy z uszkodzonymi danymi? Z innej strony - czy czasem warstwa repo ma uniezależnić od warstwy magazynowania danych? Czy zatem mogą istnieć takie warstwy magazynowania, które nie zawierają mechanizmów sprawdzania spójności, a nawet nie zawierają struktur definiujących format danych? Czy w takich przypadkach walidacja jest porządana?

1

Albo migracja starych danych, albo w warstwie repozytorium robisz chamskiego ifa zanim złożysz agregat/encje :)

3

Ale na czym polega ta walidacja? Jeśli powiedzmy jakiś wymagany value object nie jest obecny, a zgodnie z Twoją walidacją biznesową coś takiego nie powinno nigdy mieć miejsca, i masz po prostu uszkodzone dane, to walidacja siłą rzeczy musi się skończyć jakimś wyjątkiem/błędem. A co za tym idzie- jeśli jakiś obiekt jest np. nullem to ja bym pozwolił procesowi (biznesowemu) w sposób "naturalny" się wywalić, zamiast przy ładowaniu encji z bazy sprawdzać czy coś co nie miało prawa być nullem nie łamie tej zasady.

W przeciwnym razie będziesz musiał duplikować pewne zasady biznesowe poza Twoim modelem domenowym. Zamiast mieć te zasady w agregatach i serwisach domenowych, będziesz je dodatkowo musiał umieścić przy wyciąganiu encji z bazy.

Samo rozdrabnianie się nad takim problemem sugeruje że prawdopodobnie źle podchodzisz do pisania aplikacji opartych o DDD, bo zamiast skupiać się na zasadach biznesowych skupiasz się na technikaliach.

0

Jeśli masz milion operacji na sekundę to wydajność tu będzie miała wpływ. Ale jak to typowa aplikacja biznesowa to bym się tą dodatkową walidacją nie przejmował. Fajnie, jest, spoko. A my zajmijmy się czymś pożytecznym i np zbudujmy nowy feature albo zróbmy gdzieś refaktoring, dopiszmy testy...

0
Edelner napisał(a):

Mamy jakiś serwis, który pobiera encję z repozytorium i wykonuje na niej jakąś logikę. Encja składa się z np. 10 value objectów i każdy z nich ma mniej lub bardziej skomplikowaną walidację. Encja w repozytorium przed pobraniem jest mapowania np. z encji hibernetowej na encję domenową i w czasie tego mapowania uruchamiają się walidatory value objectów i tutaj jest problem, bo skoro encja już była zapisana w repozytorum, to siłą rzeczy musi być poprawna i ta walidacja jest zbędną, ale teraz pytanie: jak w takim razie pominąć ją?

No najprościej to chyba nie uruchamiać, nie?

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