Существует хороший пример, взятый here:Содержит ли метод поддержки SOA?
CRUD х Бизнес-логика интерфейса. Предположим, что вы работаете со счетами-фактурами. Каждый счет-фактура состоит из InvoiceHeader и одной или нескольких InvoiceLine. Если вы используете интерфейс CRUD для счета-фактуры, вы сначала вызываете операцию CreateInvoiceHeader для создания InvoiceHeader, а затем нескольких операций AddInvoiceLine, чтобы добавить все InvoiceLines - это подход CRUD на низком уровне. Но если вы реализуете бизнес-логику со стороны службы, вы будете называть единый CreateInvoice и передавать в объект сервис-объект (заголовок со всеми строками) для создания и добавления того, что необходимо.
Почему совершенно законна композиция метод
var Invoice =
Service.CreateInvoice(
Service.CreateInvoiceHeader(...),
{
Service.CreateInvoiceLine(...),
Service.CreateInvoiceLine(...)
}
)
- абсолютно ужасно с точки зрения производительности при использовании в SOA?
- не может быть автоматически переведен на один служебный вызов?
Почему необходимо один вместо создания сложного объекта графа и отправить его в сервисный метод
var InvoiceDTO = new InvoiceDTO(
new InvoiceHeaderDTO(...),
{
new InvoiceLineDTO(...),
new InvoiceLineDTO(...)
}
)
var Invoice = Service.Create(InvoiceDTO)
и служба должна пройти весь граф и называть только те же методы обслуживания, чтобы собрать полученный счет-фактуру?
Можно ли использовать композицию метода для создания сложных результатов без использования сложных графов объектов в качестве переноса данных?