Я хотел бы остановиться на этом вопросе When to update audit fields? DDD.Как обновить поля проверки в модели домена?
В моей модели домена, и это может быть не подходящее место для нее, но у нас есть свойство для CreateBy и ModifiedBy, оба типа User, оба объекта значения.
Я новичок в DDD и смущен, на каком уровне отвечает за обновление этих свойств ... Данные? Домен? или приложение?
В связанном выше вопросе упоминается использование события для обновления этих свойств ... было бы предположение, что эти поля могут быть обновлены в Домене?
Вот пример моего класса ...
public class SpritePalette
{
private readonly SpritePaletteColors _colors;
public string Id { get; private set; }
public string Name { get; private set; }
public SpritePaletteColors Colors { get { return _colors; } }
public bool IsPublic { get; private set; }
public User CreatedBy { get; private set; }
public DateTime CreatedDate { get; private set; }
public User ModifiedBy { get; private set; }
public DateTime ModifiedDate { get; private set; }
public SpritePalette(
string name)
{
this.Name = name;
this.IsPublic = false;
_colors = new SpritePaletteColors();
}
internal void UpdateId(string value)
{
Validate.IsNotEmpty(value, "Id is required.");
this.Id = value;
}
public void UpdateName(string value)
{
this.Name = value;
}
public void MarkAsCreated(User value)
{
this.CreatedBy = value;
this.CreatedDate = DateTime.UtcNow;
}
public void MarkAsModified(User value)
{
this.ModifiedBy = value;
this.ModifiedDate = DateTime.UtcNow;
}
public bool HasColor(string color)
{
return _colors.HasColor(color);
}
public void AddColor(string color)
{
_colors.AddColor(color);
}
public void RemoveColor(string color)
{
_colors.RemoveColor(color);
}
public void UpdateIsPublic(bool value)
{
this.IsPublic = value;
}
}
Я работник два метода, один для маркировки модели, как созданные, которая обновляет CreatedBy и CreatedDate, и аналогичный метод для маркировки модели как изменено.
Насколько это приемлемо, когда дело доходит до DDD? Каков лучший способ справиться с обновлением свойств аудита, подобных этим? Есть ли лучший способ, т. Е. Использование событий?
Я признаю, что это немного субъективно, но будет признателен за любую помощь, которую любой может предложить!