BaseEntity 允许完全访问列表事件,这对我来说似乎不正确。当然,实体应该是唯一允许管理域事件集合的东西。当前的实现甚至允许以下代码:
var toDoItem = new ToDoItem { Title = "Test" };
toDoItem.Events = null!;
遵循仅获取 IReadOnlyList 并且底层列表是私有的并且只能通过受保护的 AddEvent 方法和公共 ClearEvents 方法修改的模式会更好吗?我不确定是否应该允许实体之外的任何东西引发域事件,但如果需要,可以公开 AddEvent 吗?
此外,Id 属性也是可公开设置的。在 DDD 中,在其生命周期内更改实体的身份肯定是无效的。因此,这应该是一个 init 属性,还是只能通过构造函数设置,或者至少是一个受保护的 setter?