2008-10-31 2 views
2

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

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

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

Спасибо!

ответ

1

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

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

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

1

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

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

DataSet.AddRequirement (Class.Requirements)

DataSet.Prefetch

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

Class.Process (DataSet)