Ho una classe Document
e il documento ha uno stato:
public enum DocumentStatus : byte
{
Incompleted,
Completed,
Cancelled
}
Ora ho un dilemma che non posso risolvere da solo.
Se Document
ha metodi come Cancel
e Complete
e eventi di dominio come DocumentCancelled
e DocumentCompleted
public class Document : Entity, IAggregateRoot
{
...
public DocumentStatus Status { get; private set; }
public void Cancel()
{
Status = DocumentStatus.Cancelled;
this.AddDomainEvent(new DocumentCancelled(this));
}
public void Complete()
{
Status = DocumentStatus.Completed;
this.AddDomainEvent(new DocumentCompleted(this));
}
}
O sarebbe anche bello rendere pubblico Status
setter e avere eventi di dominio come DocumentStatusChanged
?
public class Document : Entity, IAggregateRoot
{
...
private DocumentStatus _status;
public DocumentStatus Status
{
get => _status;
set {
this.AddDomainEvent(new DocumentStatusChanged(this, _status, value)); // oldValue, newValue
_status = value;
}
}
}
In questo caso è meglio che usare un metodo come:
public class Document : Entity, IAggregateRoot
{
...
public DocumentStatus Status { get; private set; }
public void SetDocumentStatus(DocumentStatus status)
{
this.AddDomainEvent(new DocumentStatusChanged(this, Status, status)); // oldValue, newValue
Status = status;
}
}
Scusa se questo sembra banale o stupido, ma sono nuovo di DDD e sto cercando di seguire le migliori pratiche.