Exemplo n.º 1
0
        static void Main(string[] args)
        {
            var config = new ConfigurationBuilder()
                         .SetBasePath(Directory.GetCurrentDirectory())
                         .AddJsonFile("config.json")
                         .Build();

            var serviceProvider = new ServiceCollection()
                                  .AddTransient <EventPublisher, EventPublisher>()
                                  .AddTransient <IEventStore>(s => new SqlEventStore(config["connectionstring"], s.GetService <EventPublisher>()))
                                  .AddTransient <StateConnector, StateConnector>()
                                  .AddTransient <ICommandHandler <CreateNewPersonCommand>, PersonCommandHandler>()
                                  .AddTransient <ICommandHandler <ChangeAgeCommand>, PersonCommandHandler>()
                                  .AddTransient <ICommandHandler <ChangeNameCommand>, PersonCommandHandler>()
                                  .BuildServiceProvider();

            Guid id = Guid.NewGuid();

            CreateNewPersonCommand newPersonCommand = new CreateNewPersonCommand
            {
                AggregateRootId = id,
                Age             = 28,
                Name            = "John Doe"
            };

            ChangeNameCommand nameToJane = new ChangeNameCommand
            {
                AggregateRootId = id,
                Name            = "Jane Doe"
            };

            ChangeAgeCommand ageTo29Command = new ChangeAgeCommand
            {
                AggregateRootId = id,
                Age             = 29
            };

            ChangeAgeCommand ageTo30Command = new ChangeAgeCommand
            {
                AggregateRootId = id,
                Age             = 30
            };

            CommandHandler commandHandler = new CommandHandler(serviceProvider);

            commandHandler.Handle(newPersonCommand);
            commandHandler.Handle(nameToJane);
            commandHandler.Handle(ageTo29Command);
            commandHandler.Handle(ageTo30Command);

            StateConnector connector   = serviceProvider.GetService <StateConnector>();
            var            foundPerson = connector.Get <Person>(id);

            Console.WriteLine(foundPerson.ToString());
        }
        public void Handle(ChangeAgeCommand command)
        {
            var person = _stateConnector.Get <Person>(command.AggregateRootId);

            if (person != null)
            {
                _stateConnector.Save(new AgeChangedEvent {
                    AggregateRootId = command.AggregateRootId, Age = command.Age
                });
            }
        }