CQRS - сложные типы - PullRequest
       41

CQRS - сложные типы

0 голосов
/ 12 февраля 2019

В соответствии с шаблоном CQRS, разрешено ли добавлять сложные типы внутри команды?(См. Класс «Адрес» в примере ниже)

public interface ICommand{}

public class RegisterNewUser: ICommand{
    public string FirstName {get;set;}
    public string LastName {get;set;}
    public List<Address> Addresses {get;set;}
}

public class Address{
    public string Street {get;set;}
    public string City {get;set;}
}

public class RegisterNewUserHandler: ICommandHandler<RegisterNewUser>{
    //Do some stuff
}

По моему мнению, я бы сказал да ... но я думаю, что видел других, которые говорят, что вам не разрешено это делать.

Ответы [ 2 ]

0 голосов
/ 12 февраля 2019

Разрешено ли добавлять сложные типы внутри команды в соответствии с шаблоном CQRS?

Да.

Где это действительно сложно: пытаться изменить типы, которыехранятся в разных местах.

Так, например, если вы собираетесь хранить изменения для пользователя в «хранилище пользователей», а изменения в адресах в «хранилище адресов», и вы неУ вас нет какой-то гарантии, что репозитории будут управляться одной и той же транзакцией, и тогда вы начнете сталкиваться с проблемами согласованности.

0 голосов
/ 12 февраля 2019

Короче говоря, я полагаю, что так и должно быть, за исключением случаев, когда у кого-то есть веские аргументы против этого.

Давайте посмотрим на это так: у нас есть пользователь, регистрирующийся, он регистрирует свои три адреса и нажимает кнопку сохранениякнопка запуска нашей команды на стороне сервера.Отлично, теперь наше приложение разбивает создание на две команды: одна сохраняет адреса, другая - реальный человек и связывает их.

Теперь, после сохранения наших адресов, наше приложение вылетает (по какой-то не связанной причине), о нет!Теперь у нас есть три адреса, сохраненные в нашей базе данных, но нет пользователя.Поздравляю, наша База данных теперь содержит мертвые данные!

...