如果您使用的是Event Sourcing,那么您确实可以对聚合进行建模,而无需添加它们实现业务逻辑不需要的属性。
这是一个例子:
class Customer {
public Guid ID { get; private set; }
public Customer(Guid id, firstName, lastName, ...) {
ID = id;
this.AddEvent(new CustomerCreatedEvent(id, firstName, ....);
}
public void ChangeName(firstName, lastName) {
this.AddEvent(new CustomerRenamedEvent(this.ID, firstName, lastName),
}
}
Custom 仅具有 ID 属性,因为它需要将其添加到它生成的每个事件中。 FirstName 和 LastName 被省略,因为即使在调用 ChangeName 方法时也不需要它们。它只记录发生这种情况的事件。如果您的逻辑需要 FirstName,那么您可以添加它。您可以省略任何不需要的属性。
在这种情况下,您的 存储库 将只保存事件,而不关心客户属性的值。
在读取端,您可能需要这些属性,因为您将向用户显示它们。
如果您的聚合不是事件来源的,那么您可能需要更多的聚合属性来实现它的逻辑,并将它们保存到数据库中。
这是一个例子:
class Customer {
public Guid ID { get; private set; }
public string FirstName { get; private set; }
public string LastName { get; private set; }
public void ChangeName(firstName, lastName) {
FirstName = firstName;
LastName = lastName;
}
}
在这种情况下,您的 Repository 将需要这些属性,因为它会生成查询以使用新值更新数据库。
不确定“客户实体没有意义”是什么意思。