Вы правы, думая, что это правильный способ делать вещи, и вы также правы, что это замедляет ход событий и может иногда быть громоздким. SOA обязательно обменивается некоторой эффективностью в обмен на обеспечение единых точек контроля для всех данных, связанных с сервисом. На самом деле, даже идея иметь «общий DAS-сервис» немного воняет в некоторых кругах SOA.
Централизовав все операции CRUD для одной службы в приложении SOA, вы можете обеспечить целостность данных и правильное выполнение бизнес-правил. Чтобы привести пример, подумайте о сущности, которую вы хотите сохранить, с которой связаны некоторые бизнес-правила, к которым трудно обратиться с точки зрения чистого SQL - например, скажем, таблица, в которой хранятся ссылки на файлы, и создайте / обновите сервисы, обеспечивающие существование этих файлов.
С помощью SOA и единой точки доступа к этим таблицам вы можете кодировать логику в методах создания / обновления и быть разумно уверенными в том, что данные, которые вы получаете от службы, действительны - то есть файлы, на которые имеются ссылки, существуют. Если бы кто-то был способен записывать в эти таблицы или извлекать из них данные, такой гарантии не было бы - даже если вы сами вызываете службу, вы не знаете, что другие программисты, из-за злого умысла или просто планируя забывчивость, забыли реализовать это критическое бизнес-правило. Это приводит к защитному программированию, где каждый бит клиентского кода обеспечивает независимую бизнес-логику и, в конечном счете, запутанный беспорядок бизнес-логики, разбросанный по всему вашему приложению.
Еще одним преимуществом является масштабируемость и удобство обслуживания. Допустим, одна из ваших служб имеет доступ к огромному массиву данных. С SOA все «черный ящик», так что ваш клиентский код не имеет большого знания о том, как данные в конечном итоге получаются. Вы можете изменить свою СУБД, таблицы разделов или внедрить кэширование и сделать все это невидимым для вызывающего его клиентского кода - гарантируя, что ваши болезненные обновления нужно делать только в одном месте. Поскольку код базы данных разбросан по всему приложению, такое обновление становится чрезвычайно болезненным.