В шаблоне чистой архитектуры Ardalis должен ли BaseEntity полностью раскрывать список событий домена?

#ardalis-cleanarchitecture

#ардалис-чистая архитектура

Вопрос:

Базовый элемент обеспечивает полный доступ к событиям списка, мне это кажется неправильным. Конечно, сущность должна быть единственной вещью, которой разрешено управлять коллекцией событий домена. Текущая реализация даже позволила бы использовать следующий код:

 var toDoItem = new ToDoItem { Title = "Test" }; toDoItem.Events = null!;  

Было бы лучше следовать шаблону, в соответствии с которым доступен только список get, IReadOnlyList, а базовый список является закрытым и может быть изменен только с помощью защищенного метода addEvent и общедоступного метода ClearEvents? Я не уверен, что что-либо за пределами сущности должно быть разрешено вызывать события домена, но если бы это требовалось, addEvent можно было бы опубликовать?

Кроме того, свойство Id также доступно для публичной настройки. В DDD, безусловно, недопустимо изменять личность объекта в течение его жизни. Как таковое, должно ли это быть либо свойством инициализации, либо устанавливаемым только с помощью конструктора, или, по крайней мере, защищенным настройщиком?