У меня есть встроенный корень счета-фактуры, который в какой-то момент может быть отправлен на учетную внешнюю веб-службу и отмечен как отправленный путем сохранения некоторого идентификатора/номера, полученного из этой службы.DDD Доменные службы
Каков правильный способ сделать это в DDD?
Вот мои идеи:
Первый apprroach:
Иметь счета AggregateRoot с функцией SendToAccounting
, и ввести домен службы/интерфейс, который будет отправлять счета-фактуры к бухгалтерскому учету, и получить некоторые «идентификатор/код»в бухгалтерскую программу и установить AccountingSoftwareId
свойство
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();
Второй подход:
Похожие, как первый подход, но обслуживание домена должен быть ответственным за сохраняющихся так:
var invoice = _invoiceRepository.GetInvoiceById(id);
///unit of work save will be called inside this function
invoice.SendToAccounting(someDomainService);
Третий approcach:
обслуживание домена будет полностью rensponsible инкапсулировать такое поведение
///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();
}
Я не совсем понимаю, к чему относится процесс отправки в учет - что это? – tomliversidge
как вы справитесь с сбоем при вызове внешней службы? – tomliversidge
Что такое учетная запись, используемая для агрегирования счетов-фактур? – tomliversidge