Во-первых, сетка данных является элементом пользовательского интерфейса, поэтому его работа должна быть ориентирована только на пользовательский интерфейс - она не должна контролировать процесс / рабочий процесс вашего приложения.Я не думаю, что вы предлагали это сделать, поэтому я просто пытаюсь убедиться, что вы этого не сделаете :) 1001
Как это сделать?Разделите приложение на части, где каждая выполняет одну работу и делает это хорошо:
- в пределах логического уровня, имеет компонент (интерфейс / сервис), который обрабатывает поток данных.Абстрагируйся, если сможешь, для будущей гибкости.WCF может быть опцией (?)
- «Управлять» данными внутри логического уровня - используйте это в качестве основного источника (данных) истины.
- используйте модель, управляемую событиями, чтобы сохранитьосновной источник данных в syunc с изменениями, инициированными пользователем и службой.
- Имеют (под) компоненты, которые обрабатывают определенные задачи обновления (file / UI & DataGrid).
- Наконец, логический уровень также будет содержатьцентральное место, где вы все делаете.
См. изображение ниже.
Будут некоторые шаблоны проектирования, которые вы можете использовать, но я не уверен, какие из них уместны, но на основепредоставленная информация - но, надеюсь, это будет полезно в то же время.
Что касается производительности - в каких областях вы считаете производительность проблемой?
- Переносданные?
- рендеринг для пользователя?
- отражение изменений (если да - между какими битами в точности)?
- Сколько данных вы перемещаете, как часто они меняются?
- Веб-клиент или толстый клиент?
альтернативный текст http://www.freeimagehosting.net/uploads/09a5e70b03.jpg
В полях показаны основные компоненты, которые могут включать различные классы.Строки показывают основные информационные потоки.
«Центральный контроллер» запускает шоу.«Первичные данные» являются частной копией данных.DataGrid (или любой другой вид «клиента») может отправлять обновленные данные на центральный контроллер через события.Данные передаются в контроллер (который решает, что с ним делать) через один и тот же набор обработчиков событий (тот же, что они существуют в одной и той же логической области).Возможно, вы захотите, чтобы они были определены за интерфейсом, чтобы вы могли менять реализации по мере необходимости.Одним из них может быть локальный поставщик данных, который отправляет и запрашивает данные (в отличие от их отправки в контроллер / обработчики событий.