Давайте представим, что у нас есть сервис, который вызывает бизнес-процесс. Этот процесс вызовет слой данных для создания объекта типа A в базе данных.
После этого нам нужно снова вызвать другой класс уровня данных, чтобы создать экземпляр типа B в базе данных. Нам нужно передать некоторую информацию о A для внешнего ключа.
В первом методе мы создаем объект (изменить состояние) и возвращаем его идентификатор (запрос) в одном методе.
Во втором методе у нас есть два метода: один (createA) для сохранения и другой (getId) для запроса.
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);
}
Из моего понимания второй метод более полно следует за разделением командных запросов. Но я считаю расточительным и нелогичным запрашивать базу данных, чтобы получить объект, который мы только что создали.
Как вы согласовываете CQS с таким сценарием?
Только ли второй метод следует за CQS, и если да, то предпочтительнее ли использовать его в этом случае?