我想封装聚合的内部结构,但是现在,我可以调用Person.Address.Update()
并能够直接修改该实体。
我想将Person.Address
设为私有字段,并且不能从聚合根类外部访问。有人可以解释如何为Entity Framework Core进行流畅的API映射。地址在其自己的表中(与“人”一一对应)。我无法使其正常运行,也不想被当前的设计所困扰。
public class Person : Entity, IAggregateRoot
{
public string FirstName { get; private set; }
public string LastName { get; private set; }
public Address Address { get; private set; }
private Person() { }
public Person(string firstName, string lastName, Address address)
{
FirstName = firstName;
LastName = lastName;
Address = address;
}
public void UpdateAddress(string streetName)
{
Address.Update(streetName);
}
}
public class Address : Entity
{
public string StreetName { get; private set; }
private Address() { }
public Address(string streetName)
{
StreetName = streetName;
}
public void Update(string streetName)
{
StreetName = streetName;
}
}
答案 0 :(得分:0)
我认为,通过UpdateAddress实现地址修改的方法是正确的。您的集合具有很多公开的业务方法,通过它们可以修改集合和被包围实体的整个状态。也许您可以找到比UpdateAddress更好的方法名称,因为“更新”似乎是技术细节,例如:AssignAddres,LocateAtAddress,AttachAddress。同样,还应从UpdateAddress方法中广播业务事件,例如:当聚合(+内部实体)的状态更改时,PersonaLocatedAtAddressEvent。