Зробимо вигляд, що у нас є сервіс, який викликає бізнес-процес. Цей процес зажадає рівень даних для створення об’єкта типу А в базі даних.
Після цього нам потрібно знову зателефонувати на інший клас рівня даних, щоб створити екземпляр типу 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, і якщо так, то бажано використовувати його в цьому випадку?