需要很酷的软件架构师:)
我有两个实体:公司和用户。
当用户被添加到公司时,会创建一个员工实体。员工代表用户和公司之间的联系。没有访问列表,员工实体是无用的。换句话说,我有一些不变量:父实体(员工)必须与子实体(访问列表)一起创建。
我正在寻找在 c# 代码中实现这个不变量的设计解决方案。
Employee 实体具有带有必需参数的构造函数:
public class Employee
{
public Employee(EmployeeCreationParams creationParams)
{
this.Company = creationParams.Company;
this.User = creationCommand.User;
}
public Company { get; protected set; }
public User { get; protected set; }
// other state and logic
}
子实体:
public class EmployeeAccessList
{
public EmployeeAccessList(EmployeeAccessListCreationParams creationParams)
{ /* initialization logic */ }
public Employee { get; protected set; }
public OperationEnum Operation { get; protected set; }
}
有通用存储库服务:
public class Repository
{
public void Persist<TEntity>(TEntity entity)
{
// internal stuff
}
}
Employee 被创建然后持久化:
var employee = new Employee(creationParams);
_repository.Persist(employee);
并且 acl 也得到了持久化:
var accessList = CreateAccessList();
foreach(var acl in accessList)
{
_repository.Persist(acl);
}
我找不到在员工创建逻辑中注入访问列表创建登录的正确方法。因此,父母和孩子都被视为一个整体。
我尝试将子创建逻辑添加到父构造函数中:
public class Employee
{
public Employee(EmployeeCreationParams creationParams)
{
this.Company = creationParams.Company;
this.User = creationCommand.User;
var accessList = CreateAccessList();
foreach(var acl in accessList)
{
_repository.Persist(acl);
}
}
}
..但这个解决方案看起来不正确。子对象在父实体之前被持久化。