Dzięki za odniesienie.
Wydaje mi się że mam za mało informacji o tym co próbujesz zrobić i jak ten system działa.
Tak, opisze więc głębiej. Domena tego systemu może wymagać małego wprowadzenia, wiec posłuże się domeną motoryzacji.
Przesyłasz DTO. Jeśli masz architekturę "encja na twarz i pchasz" to może to nie jest w ogóle temat na DDD?
Przesyłam DTO. Na jego podstawie będzie generowany obiekt domenowy.
Tutaj wygląda to z opisu na bardziej problem techniczny gdzie DDD nie musi i nie powinno pewnie być używane.
Kwestia zapisu zależy od stanu obiektu domenowego. Można zapisać obiekt, jeżeli spełnia zasady kompatybilnosci stawiane przez biznes np dopasowanie opon do hamulców, dodatkowo nie jest w konkretnym stanie, np BLOCKED. oraz, nie był wcześniej edytowany, informacje o edycji znajdują się wewnątrz obiektu (zwykły counter).
Czy pytanie "Czy mogę zapisać" brzmi bardziej jak pytanie do aplikacji niż do czystego biznesu. Czy Ty na pewno chcesz tutaj mieć DDD? Może napisz więcej o problemie i co próbujesz osiągnąć?
Pytanie czy mogę zapisać zależy od biznesu. Czemu?
Dlatego, że klient może dokonać zapisu zmian, ale pod wieloma regułami, np opony mogą nie pasować do klockow hamulcowych, ktore wybral. Stąd agregat o nazwie car zawiera stany, które będą kompatbilne dla zapisu lub nie, To jest typowo biznesowa zasada, która powinna być widoczna.
"Problem jest wtedy, jak używasz getera do wyciągnięcia informacji z agregatu czy tam encji i trzymasz logikę która na nich pracuje gdzieś poza nimi. A ja dalej nie rozumiem do czego Ci getter potrzebny w tym scenariuszu.
Właśnie! efekt byłby taki, że pchamy logikę biznesową na zewnątrz.
if(car.getCounter() > 1 )
Wtedy cieknie abstrakcja do serwisu aplikacji.
widzę rozwiązanie w programowaniu funkcjnym.
klasa domenowa car :
class Car {
Car changeTire(Tire tire){
//logika biznesowa i nabijany counter
}
Either<NoNieUdaloSie,UdaloSieATuMaszObiekt> save(){
//logika biznesowa dla left fail z konkretna informacja, dla right obiekt zwracany .
}
}
Trzecim rozwiązaniem jest metoda dająca informacja, czy auto jest ze sobą komplatiblne, np -> czy mamy opony pasujace do hamulców. Niemniej, nie wiem jak powinno być "zgodnie ze sztuką". Getery to cieknąca abstrakcja, po zapoznaniu z ddd, boję się ich po małe dzieci po opowieściach z duchami.