Глава 8. Общая картина 125
в виде компонентов сеанса, действующих как интерфейсы удаленного доступа. Если, од-
нако, модель предметной области более сложна, целесообразно обеспечить ее полную не-
зависимость от структуры компонентов EJB, чтобы получить возможность конструиро-
вать, выполнять и тестировать бизнес-логику без оглядки на причуды EJB-контейнера.
В такой схеме для реализации модели предметной области лучше всего использовать объ-
екты POJO с оболочками в форме компонентов сеанса, функционирующих в роли ин-
терфейсов удаленного доступа. Если вы решили не пользоваться компонентами EJB,
можно разместить все приложение на Web-сервере, чтобы избежать удаленных вызовов
между слоями представления и бизнес-логики. Если модель предметной области основана
на модели объектов POJO, последнюю можно применить и для реализации преобразова-
телей данных (Data Mapper, 187) — либо с привлечением неких готовых инструментов
объектно-реляционного отображения, либо с помощью доморощенных средств, разра-
ботка которых, возможно, оказалась бы оправданной и уместной.
Применяя компоненты сущностей в любом контексте, не снабжайте их удаленными
интерфейсами. Я не вижу смысла в таких компонентах. Компоненты сущностей обычно
применяются как модели предметной области или шлюзы записи данных. Чтобы они хо-
рошо выполняли возложенные на них функции, следует снабдить их интерфейсами с вы-
сокой степенью детализации. Надеюсь, я уже прожужжал вам уши по поводу того, что
удаленный интерфейс должен быть "огрубленным", с низкой степенью детализации, так
что компоненты сущностей следует ориентировать только на локальное применение.
(Единственное известное мне исключение — это типовое решение составная сущность
(Composite Entity), описанное в [3], которое представляет альтернативный способ исполь-
зования компонентов сущностей и, откровенно говоря, мне не очень нравится.)
На данный момент типовое решение модуль таблицы (Table Module, 148) не завоевало
общего признания в мире Java. Было бы интересно понаблюдать, что произойдет, если
множество записей формата JDBC окружить дополнительными службами; тогда реше-
ние, вероятно, выглядело бы вполне жизнеспособным. В такой ситуации лучше других
подошла бы модель POJO; кроме того, можно было бы заключить модуль таблицы в обо-
лочку в виде компонентов сеанса, действующих как интерфейсы удаленного доступа и
возвращающих множества записей.
.NET
Если присмотреться к .NET, Visual Studio и к истории развития инструментальных
средств разработки от Microsoft в целом, становится понятно, что здесь преобладает ти-
повое решение модуль таблицы, представляющее собой компромисс между сценарием
транзакции, с одной стороны, и моделью предметной области — с другой, а также попол-
ненное впечатляющим набором инструментов, которые позволяют воспользоваться все-
ми преимуществами вездесущей модели множества записей.
Итак, решение модуль таблицы на платформе Microsoft трактуется как выбор, пред-
лагаемый по умолчанию. В самом деле, весомых причин для применения сценариев
транзакции просто нет, за исключением самых простых случаев, но и здесь сценарии
должны обрабатывать и возвращать множества записей.
Впрочем, это не значит, что можно слепо отказаться от модели предметной области.
В .NET удается конструировать модели предметной области так же легко, как и в любой
другой объектно-ориентированной среде. Однако в этом случае от инструментов разра-
ботки нельзя ожидать такой же безграничной помощи, какая доступна при реализации