我有一个由两个实体组成的相当简单的数据模型:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public int CurrentLocationId { get; set; }
public List<Location> Locations { get; set; }
public Location CurrentLocation { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
和
public class Location
{
public int Id { get; set; }
[Required]
public int UserId { get; set; }
public string Address { get; set; }
public User User { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
为了成功运行迁移,我需要以下模型构建器代码:
builder.Entity<Location>()
.HasOne(x => …
Run Code Online (Sandbox Code Playgroud) 我是DDD的新手,目前正在寻找重建现有应用程序的方法,先从一些概念证明开始,而我仍然在寻找DDD的方法.我的问题只涉及领域模型的一小部分,所以它在某一刻似乎过于简单化了.
这是一个为在家中探望病人的护士安排的应用程序.因此,很明显"Patient"是一个AggregateRoot,而"Nurse"是另一个AggregateRoot.除了指派护士使用"预约"实体访问患者之外,患者与护士没有直接联系.
现在,约会实体可以很容易地属于患者或护士AR,或者甚至两者都认为预约是两者之间的联系.因此,我也将任命变为AR.所以第一个问题是:
1)这种建模听起来不错吗?我原本试图在患者/护士AR下添加一组约会实体,但由于它确实属于两者,因此它是自己的AR是有意义的.我当时正考虑在护士/病人AR下添加一个约会ID列表以链接到他们的约会,但这意味着保存约会的交易需要同时影响多个AR,这可以从我所知道的建议糟糕的聚合设计.
假设到目前为止这种建模是有意义的,我现在需要找出执行业务规则的最佳方法,这些规则涉及当前AR的所有3个.例如,护士不能同时在一个以上的地方,因此我们不能与分配给同一护士的另一个同时创建预约.每位患者也只能预约一次.所以第二个问题是:
2)你将如何执行这些涉及多个不同AR的规则?显然,如果约会是患者或护士AR下的嵌套集合,则规则将易于实施,并且非常自包含.现在这让我怀疑我的建模是否正确.
我已经在不列颠哥伦比亚省和佐贺县/流程经理周围阅读了很多内容,但对我而言,这是同一个BC的一部分,因此不确定我是否需要任何复杂的东西.简单地使用CommandHandler来加载多个AR对象并使用它们的状态来确定是否可以创建约会是否可以接受?
如果是这样,并且与上面的Q1重叠(假设我没有在护士/患者AR下存储预约ID列表),阅读模型是轻松找到属于相应护士/患者的预约的唯一方法 - 那么基于读取模型的状态而不是存储库中的AR来强制执行业务规则也是可以接受的吗?
希望这是有道理的,并提前感谢!
ef-core-2.0 ×1