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