Глава 7. Стратегии распределенных вычислений 115
Еще одна граница может разделять Web-сервер и сервер приложений. При прочих
равных условиях лучше выполнять код обоих серверов в рамках одного процесса,
но эти прочие условия, увы, не всегда оказываются равными.
Иногда разделять процессы заставляет необходимость применения компонентов
программного обеспечения от разных поставщиков. Код фирменного программ-
ного пакета часто выполняется в контексте собственного процесса, что вновь за-
ставляет вспомнить о распределении объектов. В лучшем случае пакет может быть
оснащен интерфейсом с низкой степенью детализации.
Наконец, могут существовать и иные жизненно важные доводы в пользу расщеп-
ления кода сервера приложений. Если так, вам остается позаботиться о том, чтобы
интерфейсы классов не оказались чрезмерно "детальными".
Сужение границ распределения
Проектируя программное приложение, необходимо пытаться сузить границы распре-
деления кода до минимально возможных пределов, и там, где распределения не мино-
вать, уделять этим границам самое пристальное внимание. Чтобы уменьшить количество
удаленных вызовов, придется пересмотреть в системе очень многое.
Впрочем, можно все еще проектировать приложение так, будто оно должно функцио-
нировать в контексте единого процесса, и применять объекты с детализированными ин-
терфейсами, но исключительно для внутренних целей, размещая на "границах" объекты
с "огрубленными" интерфейсами, которые должны предоставить возможность доступа к
"детальным" объектам. Подобный интерфейс удаленного доступа (Remote Facade, 405) не
выполняет ничего иного, кроме обеспечения взаимодействия объектов с высокой степе-
нью детализации интерфейса с внешней средой, и служит только целям распределения.
Типовое решение интерфейс удаленного доступа помогает избавиться от трудностей,
сопровождающих попытки практической реализации модели интерфейсов с низкой сте-
пенью детализации. В этом случае огрубленными методами снабжаются только такие
объекты, которые действительно нуждаются в службе удаленного доступа, и разработчи-
кам становится ясно, за что именно они платят.
Оставляя за огрубленными методами роль интерфейса удаленного доступа, вы не за-
прещаете пользоваться "точными" методами, если заведомо ясно, что объект адресуется
в контексте того же процесса. Это обстоятельство делает политику распределения более
прозрачной. В тесном контакте с интерфейсом удаленного доступа существует объект пе-
реноса данных (Data Transfer Object, 419): нужны ведь не только огрубленные методы, но
и возможность передачи объектов с низкой степенью детализации интерфейса. Когда за-
прашивается почтовый адрес, подобная информация должна пересылаться одним бло-
ком. Объект домена обычно нельзя посылать непосредственно, поскольку он является
предметом множества локальных ссылок. Поэтому все необходимые клиенту сведения
переправляются в виде специального объекта переноса данных. (Многие, кто занимается
корпоративными Java-приложениями, для подобной цели используют термин объект-
значение (value object), но он до некоторой степени противоречит смыслу одноименного
типового решения объект-значение (Value Object, 500).) Объект переноса данных присут-
ствует на обоих концах связи, поэтому важно понимать, что он не затрагивает ничего, что