408 Часть И. Типовые решения
Одним из наиболее спорных моментов, связанных с реализацией интерфейса удален-
ного доступа, является степень детализации систем. Некоторые предпочитают создавать
довольно простые интерфейсы удаленного доступа, например по одному на каждый вари-
ант использования приложения. Что же касается меня, то я отдаю предпочтение менее
детализированным системам с гораздо меньшим количеством интерфейсов удаленного
доступа. На мой взгляд, приложениям среднего размера вполне достаточно одного ин-
терфейса удаленного доступа, а крупным и даже очень крупным приложениям — не более
пяти-шести. В этом случае каждый интерфейс удаленного доступа будет иметь довольно
много методов, однако все они очень просты и вряд ли способны создать проблему для
разработчика.
При проектировании интерфейса удаленного доступа следует опираться на потреб-
ности конкретного клиента. В большинстве случаев они сводятся к необходимости
просматривать и обновлять информацию посредством пользовательского интерфейса.
В этом случае вы можете создать один интерфейс удаленного доступа для группы диа-
логовых окон, каждому из которых будет соответствовать собственный метод массо-
вого доступа, загружающий и сохраняющий данные. Щелчок на элементе управления
диалогового окна, например на кнопке изменения состояния заказа, будет запускать
соответствующие команды интерфейса. Очень часто разные методы интерфейса уда-
ленного доступа выполняют схожие операции над объектами домена. Это вполне нор-
мально: назначение интерфейса — упрощать доступ к объектам для внешних пользовате-
лей, а не для внутренних методов. Если клиентский процесс воспринимает определенные
действия как разные команды, это и будут разные команды, даже когда в действительно-
сти они соответствуют одному и тому же внутреннему методу.
Интерфейс удаленного доступа может быть с состояниями или без состояний. Приме-
нение интерфейса удаленного доступа без состояний позволит организовать пул соответ-
ствующих объектов, что оптимизирует использование ресурсов и повысит эффектив-
ность работы приложения, особенно если речь идет о модели "поставщик—потребитель".
Тем не менее, если взаимодействие с клиентами потребует сохранения состояния объек-
тов между сеансами, вам понадобится выбрать способ сохранения состояния сеанса.
Обычно для этого применяют типовые решения сохранение состояния сеанса на стороне
клиента (Client Session State, 473), сохранение состояния сеанса в базе данных (Database
Session State, 479) или реализацию сохранения состояния сеанса на стороне сервера (Server
Session State, 475). Поскольку интерфейс удаленного доступа (Remote Facade) может иметь
собственные состояния, он позволяет легко реализовать сохранение состояния сеанса на
стороне сервера, однако при наличии тысяч одновременно работающих пользователей
данное решение может привести к значительному падению производительности.
Помимо предоставления интерфейса с низкой степенью детализации, интерфейс
удаленного доступа может выполнять и другие функции, например обеспечение безо-
пасности. Использование списков управления доступом позволяет задать, каким поль-
зователям разрешено вызывать те или иные методы. Кроме того, данное типовое
решение прекрасно подходит для управления транзакциями. Метод интерфейса удален-
ного доступа может начать транзакцию, выполнить всю необходимую внутреннюю работу
и затем завершить транзакцию. Вызов метода очень удобно рассматривать как выполне-
ние отдельной транзакции. При возвращении результатов клиенту транзакции должны
быть закрыты, поскольку они не рассчитаны на такое длительное использование.