Udawajmy, że mamy usługę wywołującą proces biznesowy. Ten proces wywoła warstwę danych, aby utworzyć obiekt typu A w bazie danych.
Następnie musimy ponownie wywołać inną klasę warstwy danych, aby utworzyć instancję typu B w bazie danych. Potrzebujemy przekazać informacje o A dla klucza obcego.
W pierwszej metodzie tworzymy obiekt (modyfikujemy stan) i zwracamy jego identyfikator (zapytanie) w jednej metodzie.
W drugiej metodzie mamy dwie metody, jedną (createA) dla składowania i drugą (getId) dla zapytania.
public void FirstMethod(Info info)
{
var id = firstRepository.createA(info);
secondRepository.createB(id);
}
public void SecondMethod(Info info)
{
firstRepository.createA(info);
var key = firstRepository.getID(info);
secondRepository.createB(key);
}
Z mojego zrozumienia, druga metoda w pełni uwzględnia separację zapytań poleceń. Uważam jednak, że marnotrawienie i sprzeczność z intuicją polega na przeszukiwaniu bazy danych w celu uzyskania właśnie utworzonego obiektu.
Jak pogodzić CQS z takim scenariuszem?
Czy tylko druga metoda jest zgodna z CQS, a jeśli tak, czy w takim przypadku lepiej ją zastosować?