Дефрагментация мозга. Софтостроение изнутри | страница 54
В среде веб-сервисов вопрос с «нерадивым программистом» решили радикально – отменой самой возможности написать такой код. Несмотря на то что в 80 % случаев имевшаяся автоматическая загрузка была уместной и здорово сокращала программу.
Как уберечь кукурузу от насекомых-вредителей? Очень просто: выкосить её всю, к чертям. Вредители придут, а кушать нечего.
Возвращаемые веб-службами объекты не связаны с серверными за их отсутствием. Потому что у серверной части приложения нет состояния и, соответственно, не может быть никаких объектов в принципе. Обмен сообщениями происходит как и в обычной веб-среде: запрос – ответ без поддержки сессии. Общеупотребительная практика – использование DTO для передачи состояния объектов от клиента к серверу и обратно. Но DTO не содержит никаких ссылок на другие объекты, кроме вложенных. Его структура состоит из полей скалярных типов, разрешённых стандартом, вложенных объектов и массивов. Соответственно, вы не можете прозрачным образом динамически подгрузить недостающий объект, для чего придётся явным образом вызывать службу.
Прозрачная загрузка объектов в клиентском CORBA-приложении
BookGroup group = catalog.getBookCategory("Программирование");
Book[] books = group.getItems(); // один вызов сервера
foreach(Book book in books)
{
ShowInfo(book.Name +": ");
ShowInfo(book.getPopularity(). getVotesCount()); // два вызова
}
Работа клиентского приложения с DTO в среде веб-служб
BookGroupServiceClient groupClient = new BookGroupServiceClient(url1);
BookGroupDTO group = groupClient.GetBookCategory("Программирование");
BookServiceClient bookClient = new BookServiceClient(url2);
BookDTO[] books = bookClient.GetByGroupId(group.Id);
foreach(BookDTO book in books)
{
PopularityServiceClient popularityClient = new PopularityServiceClient(url3);
PopularityDTO popularity = popularityClient.GetByBookId(book.Id);
int votesCount = popularityClient.GetVotesCount(popularity.Id);
ShowInfo(book.Name +": ");
ShowInfo(votesCount);
}
Сила CORBA проявляется в том, что технология может работать и как в приведённых примерах, то есть с реализацией элементов полноценного многопоточного сервера приложений, и аналогично веб-службам, обрабатывая в сервисах объявленные в интерфейсах структуры, напоминающие DTO.
Вне контекста «автоматизированного бардака»[85] современные заявления о том, что СОА не оправдала возложенных на неё надежд, свидетельствуют о том, что и выбранная для неё модель веб-служб не стала решением проблем взаимодействия приложений в корпоративной среде. Ожидает ли нас новое пришествие CORBA в виде облегчённой её версии – покажет время. Поищите в Интернете по ключевым словам Web ORB – обнаружите немало интересного.