Читайте также:
|
|
В Silverlight, как и в любом RIA-клиенте, обмен данными асинхронный. Это обстоятельство часто значительно снижает скорость разработки по сравнению с обычными настольными приложениями, которые используют архитектуру «клиент-сервер». При асинхронном обмене данными запуск запроса к веб-сервису и получение результата выполняется не по очереди, а с некоторой задержкой, при этом после выполнения запуска запроса текущий поток продолжает выполняться, не дожидаясь ответа от сервера. Ответ приходит в любое время, а обработкой его результатов (к примеру, коллекции с данными) должен заниматься делегат, который был подписан на событие ответа по этому запросу. Однако в ходе запроса могут возникнуть ошибки – исключение в коде веб-сервиса, потеря связи с сервером, недоступность БД и т. д. При этом, в отличие от системы с синхронным выполнением запросов, исключение возникает не в методе запуска запроса, а передается как аргумент делегату. Как результат, отлавливать ошибки необходимо уже в двух местах – в коде старта запроса и в делегате завершения выполнения запроса. Конечно, сделать эту работу нетрудно, но, как показывает практика, запросов в системе может быть несколько десятков или сотен – при таком положении дел сильно возрастает сложность отладки. Чтобы решить проблему, можно абстрагироваться от конкретных запросов, и написать систему классов, которая позволит легко обмениваться с веб-сервисом любыми типами данных. Такие классы значительно упростят расширение системы – добавление новых запросов будет требовать написания минимального количества кода. Безусловно, разработка упомянутой системы классов оправдана лишь для достаточно крупных систем, либо в случае разработки нескольких типовых проектов. Подобная система классов может является клиентским фреймворком – он может быть использован повторно в других проектах на Silverlight.
Один из вариантов клиентского фреймворка предлагает паттерн MVVM – «модель-представление-модель представления» (Model-View-ViewModel). В 2005 году Джон Госсман (John Gossman), один из архитекторов WPF и Silverlight в корпорации Microsoft, рассказал в своем блоге об этом паттерне. MVVM совпадает с моделью презентации (PM) Фаулера в том плане, что оба шаблона содержат абстракцию представления, содержащую состояние и поведение представления. Фаулер ввел модель презентации как способ создания независимого от платформы пользовательского интерфейса абстракции представления, а Госсман предложил MVVM как стандартизированный способ использовать основные функции WPF для упрощения создания пользовательских интерфейсов. В этом смысле MVVM - частный вариант более общего шаблона PM, приспособленным для платформ WPF и Silverlight.
Использование этого паттерна позволяет отделить логику приложения от графического интерфейса, что дает возможность разрабатывать то и другое независимо друг от друга. Описанные выше классы фреймворка могут служить базовыми моделями паттерна MVVM, и содержать весь набор типовых операций по асинхронной загрузке и отправке данных. С учетом того, что в Silverlight существует мощная система связывания данных (data binding), реализовать в Silverlight подобный паттерн довольно легко. Абстракция классов и применение MVVM сильно упростит будущую работу по расширению функциональности, добавлению новых сущностей и бизнес-логики. Начальное падение скорости разработки, связанное с проектированием абстрактных моделей, будет скомпенсировано скоростью последующей разработки новых модулей. Таким образом, использование MVVM тем более оправдано, чем больше сложность клиентской части системы.
Дата добавления: 2015-07-14; просмотров: 54 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Веб-сервисы | | | Спустя месяц |