Ich habe eine Rechnung aggregiert Wurzel, die zu einem bestimmten Zeitpunkt an die Buchhaltung externen Web-Service gesendet werden kann, und markieren Sie als gesendet durch persistent einige ID/Nummer von diesem Service erhalten.DDD-Domain-Dienste
Welches ist der richtige Weg, um es in DDD zu tun?
Hier sind meine Ideen:
Erste apprroach:
haben eine Rechnung AggregateRoot mit Funktion SendToAccounting
und Domain Service/Schnittstelle injizieren, die Rechnung an das Rechnungswesen senden wird, und rufen einige „id/Code“in der Buchhaltungssoftware und stellen AccountingSoftwareId
Eigenschaft
Invoice.SendToAccounting(IInvoiceDomain service)
{
var accountingSoftwareID = service.getAccountingSoftwareId(this);
this.AccountingSoftwareId = accountingSoftwareId;
}
///Implementation in the application service
var invoice = _invoiceRepository.GetInvoiceById(id);
invoice.SendToAccounting(someDomainService);
_invoiceRepository.Update(invoice);
_unitOfWork.Save();
Zweiter Ansatz:
Ähnlich wie erste Ansatz, aber Domain Service sollte für persistierende wie diese verantwortlich:
var invoice = _invoiceRepository.GetInvoiceById(id);
///unit of work save will be called inside this function
invoice.SendToAccounting(someDomainService);
Dritte approcach:
Domain Service wird vollständig rensponsible dieses Verhalten
///Code inside domain service
public void SendInvoiceToAccounting(int invoiceId)
{
var invoice = _invoiceRepository.GetInvoiceById(invoiceId);
string invoiceAccountingId = _accountingService.GetAccountingSoftwareId(invoice);
invoice.SetAsSentToAccounting(invoiceAccountingId);
_invoiceRepository.Update(invoice);
_unitOfWork.Save();
}
einzukapseln
Ich bin nicht klar, was der Prozess des Sendens an Buchhaltung umfasst - was ist das? – tomliversidge
Wie behandeln Sie Fehler beim Aufruf des externen Dienstes? – tomliversidge
Wie wird die accountingId im Rechnungsaggregat verwendet? – tomliversidge