Управление предварительной выборкой данных и зависимостями с типизированными наборами данных .NET - PullRequest
2 голосов
/ 31 октября 2008

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

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

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

Спасибо!

Ответы [ 2 ]

1 голос
/ 29 апреля 2010

Вы можете использовать что-то похожее на шаблон Composite, в котором каждый класс должен добавить некоторое требование к данным, затем предварительно извлечь данные, а затем обработать данные.

для каждого класса в UsedClasses

DataSet.AddRequirement (Class.Requirements)

DataSet.Prefetch

для каждого класса в UsedClasses

Class.Process (набор данных)

1 голос
/ 02 ноября 2008

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

Хороший пример - это имена и адреса. У вас может быть список имен, и каждое из этих имен может иметь несколько адресов. Методы / классы, которым не требуется доступ к адресам, не вызывают загрузку адресов. Но как только какой-либо метод или класс пытается получить доступ к адресам для данного имени, адреса для этого имени загружаются. Любое последующее использование адресов для этого имени найдет данные, уже загруженные.

Реализация этого в типизированных наборах данных будет довольно ручным процессом. (И каждый раз, когда я работаю с типизированными наборами данных, я все больше и больше ненавижу их.) Возможно, вы захотите взглянуть на LINQ to SQL, поскольку эта функциональность встроена. Существуют и другие подобные структуры, в которых это также встроено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...