我是事件溯源的新手,我正在尝试在我的简短应用程序中将事件存储实现为写入模型。我有一个包含以下代码的用户聚合:
public sealed class User : AggregateRoot
{
internal User(Guid id,
string login,
byte[] password,
string firstName,
string lastName,
string mailAddress)
: base(id)
{
Login = login;
Password = password;
FirstName = firstName;
LastName = lastName;
MailAddress = mailAddress;
Enqueue(new UserCreatedDomainEvent(id,
Login,
Password,
FirstName,
LastName,
MailAddress));
}
private User()
: base(Guid.Empty)
{
}
public string Login { get; private set; }
public byte[] Password { get; private set; }
public string FirstName { get; private set; }
public string LastName { get; private set; }
public string MailAddress { get; private set; }
public void ChangePassword(byte[] password)
{
var areTheSame = Password == password;
if (areTheSame)
{
return;
}
Password = password;
Enqueue(new PasswordChangedDomainEvent(Id, Password));
}
private void Apply(UserCreatedDomainEvent @event)
{
Id = @event.EntityId;
Login = @event.Login;
Password = @event.Password;
FirstName = @event.FirstName;
LastName = @event.LastName;
MailAddress = @event.MailAddress;
}
private void Apply(PasswordChangedDomainEvent @event) =>
Password = @event.NewPassword;
}
在我创建一个新用户之前,我需要检查,是否已经登录。我知道如何重建具有特定 id 的聚合(我在这种情况下使用 AggregateStreamAsync 方法),但是这次我需要在注册新用户之前检查所有聚合的登录。如何实现这样的逻辑?感谢您的任何回答。