Принят неправильный ответ.И несмотря на то, что Джон использует CRUD в качестве примера анти-паттерна, использующего CRUD для, это не плохо для SOA.Вот проблема с SOA, как описывает Джон: она способствует увеличению сложности на уровне обслуживания, что в конечном итоге приводит к меньшей поддержке нескольких вариантов использования.Одна из основных причин, по которой мы создаем API-интерфейсы, заключается в предоставлении доступа к нескольким приложениям, и именно здесь основной ROI заключается в создании API-интерфейсов.
Например, допустим, у нас есть блог API.Допустим, мы даем пользователям возможность писать посты, добавлять изображения и помещать комментарии на одном экране нашего внешнего приложения.В представлении Джона о SOA он, вероятно, порекомендовал бы, чтобы мы создали наш API, чтобы использовать один вызов для выполнения всех этих задач, чтобы он был менее разговорчивым и тому подобное ... Итак:
{
"post_title": "New Post",
"post_content": "Some Stuff....",
"comments": [{
"comment": "This is right on!",
"userId": 101
}, {
"comment": "I agree.",
"userId": 105
}],
"images": [{
"imgURL": "http://some.img.com/1"
}, {
"imgURL": "http://some.img.com/2"
}]
}
Теперьочевидно, это три разных объекта данных, которые необходимо хранить отдельно: пост, комментарии и изображения.С точки зрения хранилища данных сообщение отправляется в таблицу POSTS, комментарии к таблице COMMENTS и изображения к таблице IMAGES.Поэтому, если мы создаем наш сервис в соответствии с арендаторами SOA, как описывает их Джон, мы делаем один вызов с нашим объектом, и он обращается к сервисам, которые пытаются создать сообщение, которое, например, для целей, работает нормально, а затем пытается создатькомментарии, которые работают нормально, но когда мы добираемся до изображений, сервис понимает, что один из URL-адресов изображений неисправен, это ошибки.Таким образом, наш сервис возвращает ошибку?Даже если 3 другие части теперь успешно хранятся в нашем хранилище данных?Вернемся ли мы и отменить все части, которые успешно выполняются?Что, если хранилище данных уже зафиксировало изменения, и мы не можем откатить их?
Сопоставьте это с тем фактом, что если бы мы сделали это «более болтливым» и представили их по отдельности, мы могли бы теперь- использовать эти сервисы в других приложениях без необходимости переписывать какую-либо часть сервиса.
Плохая часть консолидированных услуг заключается в том, что вы продаете с мыслью, что служба никогда не выйдет из строя ... что смешно.Всегда будет крайний случай, когда что-то выйдет из строя, и, объединив все в одну услугу, вы повысите свою сложность и фактически увеличите свою способность к отказу.
Я бы сравнил эту версию SOA с недостатками, которые мы уже осознали в построении объектов Бога в объектно-ориентированном программировании.https://en.wikipedia.org/wiki/God_object
Мы знаем лучше, чем это, так почему мы перефразируем это?Консолидированные или Богослужения - плохая идея, как и объекты Бога.Я говорю: создайте свои сервисы, чтобы сделать что-то одно, и делайте это хорошо для максимально возможного количества вариантов использования, и ваш сервис будет хорошим.