Главная » Spring » Создание веб-служб на основе модели contract-first Spring

0

Представьте, что на эти выходные у вас запланирована поездка. Прежде чем пуститься в путь, нужно зайти в банк, положить чек с зарплатой и получить немного наличных на расходы.

Это самая обычная череда событий, единственное, что в ней не- обычного, – это банк. Когда вы заходите внутрь, вы не видите бан- ковских служащих, готовых помочь вам. Вместо этого вы получае- те возможность выполнить все перечисления денег самостоятельно. У вас есть прямой доступ к программе учета и к хранилищу, и вам позволено самому выполнить все необходимые операции. Итак, вы выполняете следующие действия:

1.   Помещаете подписанный чек с заработной платой в коробку для обналиченных чеков.

2.   В бухгалтерской книге исправляете свой баланс, увеличивая его на сумму в чеке.

3.   Забираете из хранилища $200 и кладете в свой кошелек.

4.   В бухгалтерской книге исправляете свой баланс, уменьшая его на $200.

5.   В качестве благодарности за проделанную работу вы платите самому себе комиссионные, положив $50 на другой счет, и вы- ходите за дверь.

Стоп! С шагами 1–4 вроде бы все в порядке. Но шаг 5 выглядит немного странным.

Проблема (если это можно назвать проблемой) с этим банком в том, что он доверяет своим клиентам слишком полный доступ

к внутренним операциям. Вместо того чтобы предоставить интер- фейс к внутренним операциям (обычно известный под названием

«кассир»), банк дает полный доступ к внутренним операциям, по- зволяя вам поступать по собственному усмотрению. Как следствие у клиента появляется возможность взять деньги из хранилища, не зафиксировав это.

Как бы здорово это ни было для клиентов, большинство банков действуют совершенно иначе (если вы знаете банк, который дает такой же полный доступ к внутренним операциям, сообщите мне – я очень хотел бы открыть там счет!). В большинстве банков есть кассиры, банкоматы и веб-сайты, позволяющие управлять счетом. Все эти интерфейсы доступа к банковским операциям являются абстракциями хранилища и бухгалтерской книги. Они с улыбкой оказывают вам услуги, но позволяют выполнять только те операции, которые укладываются в бизнес-модель банка.

Аналогично большинство приложений не позволяют обращать- ся к внутренним объектам напрямую. Возьмем в качестве примера веб-приложения. Как было показано в главе 8, пользователи взаи- модействуют с веб-приложением на основе Spring MVC посредством контроллеров. В недрах приложения могут быть скрыты десятки или даже сотни объектов, выполняющих основные операции в при- ложении. Но пользователю позволено взаимодействовать только с контроллерами, которые, в свою очередь, взаимодействуют с внут- ренними объектами.

В главе 11 было показано, как легко и просто можно создавать веб-службы с использованием различных экспортеров. Но, экспор- тируя компонент приложения как веб-службу, мы экспортируем внутренний API приложения, что влечет за собой определенные по- следствия: по аналогии с примером организации банковских услуг, представленным выше, необходимо проявить особую осторожность, чтобы не открыть слишком широкий доступ к внутреннему API. В противном случае клиенты веб-службы могут получить доступ к внутренним операциям, которые им не нужны.

В этой главе будет представлен альтернативный способ конструи- рования веб-служб с помощью фреймворка Spring-WS. Мы отделим определение внешнего API службы от внутреннего и сосредоточим- ся на обмене сообщениями между клиентами и службой, а не на вызове удаленных методов.

Не буду обманывать: создание веб-служб на основе фреймворка Spring-WS выглядит гораздо сложнее, чем экспортирование компо-

нентов с помощью JAX-WS. Однако, как мне кажется, это не на- много сложнее, а архитектурные преимущества, которые предлагает Spring-WS, заслуживают внимания.

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии