Ощутимые недостатки в переводе данных в веб-сервисах - PullRequest
0 голосов
/ 09 марта 2010

Я пишу веб-сервисы уже около года, и кажется, что процесс, который я использую для получения данных из базы данных на всем пути для отображения пользователю и обратно, имеет некоторые недостатки.

Цель этого вопроса - убедиться, что я следую рекомендациям, а не просто добавляю дополнительную работу.

Вот путь для данных из БД, до конечного пользователя и обратно.

  1. Служба получает его из базы данных в объект уровня доступа к данным (DAL).
  2. Сервис Преобразует его в DataContract для отправки клиенту.
  3. Клиент получает DataContract и преобразует его в объект на стороне клиента
  4. Клиент отображает объект / пользователь вносит изменения / объекты добавляются
  5. Клиент преобразует объект на стороне клиента в DataContact и отправляет его в службу
  6. Служба получает DataContract и преобразует его в объект уровня доступа к данным.
  7. Служба обновляет базу данных изменениями / новыми объектами.

Если вы отслеживали, объект конвертируется 4 раза (DAL-> Контракт-> Клиентский объект-> Контракт-> DAL). Это кажется большим количеством конверсий, когда ваше приложение начинает масштабировать свои данные.

Это "Лучший" способ сделать это? Я что-то упустил?

В случае необходимости я использую Visual Studio 2008, WCF, LinqToSQL и Windows Mobile 5.0 (NETCF).

1 Ответ

1 голос
/ 09 марта 2010

Возможно, вам не хватает вопроса о том, что произойдет, если вы сократите количество конверсий (то есть, если вы будете более тесно соединять слои).

Служба может напрямую возвращать объект DAL. Проблема заключается в том, что объекты DAL могут содержать данные о том, что они являются объектами DAL, а не о данных, которые они переносят. Например, классы LINQ to SQL являются производными от базовых классов, которые содержат функции LINQ to SQL - эти данные базового класса не требуются на клиенте и не должны отправляться.

Клиент может напрямую использовать объект DAL, отправленный обратно с сервера. Но для этого требуется, чтобы клиент и сервер использовали одну и ту же платформу - например, .NET. Им также придется использовать совместимые версии .NET, чтобы клиент мог использовать объект DAL на стороне сервера.

Клиент теперь может отображать объект DAL, как ему нравится, при условии, что ему не нужны интерфейсы на стороне клиента, такие как INotifyPropertyChanged. Серверу не нужен такой код для запуска, но он может понадобиться клиенту для привязки и проверки данных. .

Обратите внимание, что каждый слой имеет свои собственные требования. Сохраняя эти требования независимыми, код легче разрабатывать и поддерживать. Да, вы должны сделать некоторое копирование данных, но это дешево по сравнению со стоимостью обслуживания кода, который должен выполнять четыре разные вещи одновременно.

...