Agregaty a frameworki z ORM

0

Jak podchodzicie do tworzenia agregatów przy używaniu frameworków z ORM? Jeśli mamy obiekt Invoice to on ma jakieś pola typu name, nip itd, ale też items, więc właściwie to już jest agregat tylko taki niewidoczny. W DDD agregaty są wyróżnione, więc tworzycie osobne klasy np dla InvoiceItems?

1

Co jest agregatem? Masz dwa agregaty Invoice i Items? Co to znaczy, że agregaty są wyróżnione? Rozwiń trochę prosze, generalnie jeżeli chodzi o ORMy wszelakie to IMHO dobrym podejściem jest rozdzielić klasy biznesowe (domenowe) od sposobu ich persystencji czyli klas, które mają cokolwiek wspólnego z ORMem.

0

Invoice i Items to chyba powinien być jeden agregat, gdzie Invoice jest korzeniem. Wyróżnione tzn myślałem że to osobne klasy, a teraz już nie wiem. Ogólnie chodzi mi o to jak robić agregaty w kodzie.
Czyli jak mam encje Invoice to potem jeszcze w dziedzinie zrobić nową klasę i na niej operować, a potem przesyłać do encji Invoice?

1

Czy jeden agregat czy nie to zależy od konkretnego przypadku tzn kontekstu. Agregat składa się z pól własnych, Value Objectów oraz Encji. Dam na przykładzie samochodu. Agregatem będzie klasa samochód. Ale będą w niej inne klasy takie jak Value Objecty oraz encje (encją może być np silnik). I to będą osobne klasy.

Czyli jak mam encje Invoice to potem jeszcze w dziedzinie zrobić nową klasę i na niej operować, a potem przesyłać do encji Invoice?

Co to znaczy przesyłać? Jeżeli Invoice jest twoim agregatem, ale masz jeszcze Items to bardzo mocno zależy od tego jak masz to zamodelowane. Jeden klasa zawierający kolekcję pozycji lub kolekcja pozycji? Jeżeli masz dwie klasy Invoice i Items to obydwie klasy są w dziedzinie, jeżeli Invoice jest agregatem (np. to po stronie Invoice są reguły biznesowe) to zawiera referencję do klasy Items (osobna klasa). I świat zewnętrzny nie ma bezpośredniego dostepu do Items - tylko przez agregat, do którego należy, czyli Invoice.

class Invoice {
   private final Items items;

   public void addItem(SomeObject someObject) {
       items.add(someObject);
   }
}

Taki krótki kodzik na szybko, nie piszesz szczegółów, więc i kodzik jest bardzo ogólny.

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