@somekind @vpiotr @yarel za dużo naczytaliście się teorii OOP :P Encja (ang.entity
) może oznaczać różne rzeczy w różnych kontekstach. Autorowi na oko chodziło raczej o coś w stylu Entity Bean z jakiegoś JPA, które to de facto jest niczym więcej jak właśnie DTO do transferu danych na trasie baza danych <-> aplikacja.
OOP to ja akurat praktykuję, a nie czytam o nim. Generalnie obiekt aby był obiektem, musi mieć zachowanie, a encje są z definicji obiektami. To, że twórcy jakichś tam ormów czy innych narzędzi proste modele danych też nazwali encjami może wynikać z tego, że te obiekty przekładają się na encje bazodanowe (czyli wiersze). Nazwa niefortunna, konfundująca i irytująca (przynajmniej mnie).
No właśnie czytając DDD od góry w dół stanąłem na rozdziale z encjami, wartościami i serwisami. Problem polega na tym, że trudno jest mi przełożyć postać abstrakcji do postaci kodu lub sam sobie nie ufam w to, czy dobrze to interpretuje. Czyli każda klasa z niższego poziomu, która musi zawierać jakiś identyfikator jest encją a wartość jest jakby klasą niżej której agregatem jest encja i to encja ją identyfikuje (odpowienikiem w bazie jest np. Post i jego categoria).
Post to encja i kategoria to encja. Oba te byty jesteś w stanie niezależnie identyfikować, nieprawdaż?
Encja może zrealizować jakąś logikę, czyli np. encja pozycja faktury obliczy kwotę (liczba sztuk * cena jednostkowa) netto, a encja faktura obliczy cenę całości (sumując wszystkie swoje pozycje).
Logika wykonywana przez encje nie może wykraczać poza agregat, w którym ta encja się znajduje. W podanym przykładzie agregatem jest faktura i jej pozycje, a faktura to root (korzeń?) tego agregatu.
Jeśli trzeba wykonać jakąś logikę między agregatami, to używa się do tego serwisów.
Oprócz tego encja może wykonywać jakieś przeliczenia porównania lub składania stringów które są podawane do serwisów jako wsparcie dla klasy, która definiuje konkretny model dziedziny a raczej jego część w logice biznesowej np. transakcje bankowe.?
Zupełnie nie rozumiem pytania. Encje są częścią definicji modelu dziedziny, który jest de facto logiką biznesową.
Założę się, że na pewno ktoś z was ma coś takiego pod ręką. Chodzi mi o jakiś wycinek logiki biznesowej odpowiedzialny za jedną funkcjonalność.
Ja bym się o to nie zakładał. Prawdopodobnie nikt nigdy nie napisał niczego realnego zgodnie z DDD. To tylko buzzword.