Obecnie dokonujemy przeglądu kodu rzeczy przejętych z innego zespołu i mamy jedną wątpliwość co do stosowania SRP i jego związku z anemicznym lub bogatym modelem domeny (zgodnie z definicją Martina Fowlera). Koncepcja modelu Rich Domain ma mieć inteligentny obiekt, który może nie tylko ustawić/uzyskać jego właściwości, ale także może wykonać bardziej skomplikowaną logikę biznesową. Ciekawe, jak to pasuje do SRP?Zasada pojedynczej odpowiedzialności odnosi się do anemic/rich domain model?
Załóżmy, że moja klasa modelu ma pewne właściwości, które mogą narazić te rekwizyty i podać kilka prostych obliczeń dotyczących ich właściwości. Następny wymogiem jest, aby mieć możliwość przechowywania tego obiektu dane w pamięci jakiegoś przedmiotu, który nie jest pod moją kontrolą, jak to: metoda
class MyObject {
// get set
// parse sth
}
Przechowywać w przechowywaniu
storage.store(key, object);
Czy nie naruszają SRP jeśli MyObject ma taką samą metodę przechowywania, jak ta, z tego pov to dobry pomysł, aby móc przechowywać jej stan. Innym sposobem może być wprowadzenie rodzaju usługi tutaj i to tak zrobić:
public StorageService {
private Storage;
// constructor here
....
public void store(MyObject myobj);
}
Czy możesz wskazać mi jakieś linki mogę przeczytać o tym problemie? Znalazłem jeden wątek na SO tutaj, ale to nie odpowiada całkowicie na moje pytanie.
Jak jest rozwiązany w DDD? Modele w DDD są z definicji bogate i mogą być postrzegane jako mające zbyt wiele obowiązków.
To może być zbyt dosłowna interpretacja SRP. Ignoruj wuja Boba i idź do "spójności". –
Jak zauważono w mojej odpowiedzi, jeśli Storage jest stabilny i abstrakcyjny (powiedzmy, standardowy JSON, XML, interfejs RDB), to IMO nie ma absolutnie żadnego problemu z pójściem na spójność i umieszczenie go w modelu domeny. – user949300