Покритикуйте архитектуру обмена данными для smart клиента
От: Alexander Polyakov  
Дата: 11.06.08 16:37
Оценка:
Классическая трехзвенная архиектура:
Smart клиент на WPF
Application Server на .NET
SQL Server
Клиент и сервер общаются через WCF.

На сервере обычный ORM (LINQ to SQL). Удаленные вызовы обслуживаются RemoteFasade-ом.

Типовой метод для запросы данных с сервера
interface RemoteFasade
{

ClaimDTO GetOrder(int orderId);

}
Метод GetOrder возвращает на клиента граф связанных объектов. В методе GetOrder идет копирование данных из LINQ to SQL в TDO объекты, есть предположение, что для этого можно написать общие методы, принимающие лямбда выражения в качестве аргументов, т.е. такое ручное копирование с использованием общих методов.

Теперь о том, как данные будут приходить обратно от клиента к серверу. На клиенте есть некий ClientContext. После десериализации объектов на клиенте, для каждого DTO объекта текущий ClientContext подписывается на изменения в DTO объекте. Пользователь редактирует данные, изменения попадают в DTO объекты, а ClientContext регистрирует у себя все изменения. После того, как пользователь поработал с данными, изменения, зарегистрированные в ClientContext, отправляются на сервер. На сервере эти изменения попадают в объекты LINQ to SQL.

Замечание: Обычно паттерны Unit of work и Identity Map идут вместе. В данном случае ClientContext фактически реализует Unit of work на клиенте, но Identity Map вроде пока не нужна.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.