private void Update(string userId, Action <UserAR> updateAction)
        {
            var snapshot     = _snapshotRepository.Load(userId);
            var startVersion = snapshot == null ? 0 : snapshot.StreamVersion + 1;
            var stream       = _eventStore.OpenStream(userId, startVersion, int.MaxValue);
            var user         = new UserAR(snapshot, stream);

            updateAction(user);
            var originalVersion = stream.GetVersion();

            _eventStore.AppendToStream(userId, originalVersion, user.Changes);
            var newVersion = originalVersion + 1;

            if (newVersion % SnapshotInterval == 0)
            {
                _snapshotRepository.Save(new Snapshot(userId, newVersion, user.State));
            }
        }
        public void Handle(User_CreateCommand message)
        {
            var user = new UserAR(message.UserId, message.Name, message.Password);

            _eventStore.AppendToStream(message.UserId, 0, user.Changes);
        }