Как сделать один общий метод выбора для вашего DAL? - PullRequest
0 голосов
/ 12 марта 2009

Сценарий

У вас есть Сборка для объектов передачи данных, содержащая 10 классов, которые точно представляют 10 таблиц в вашей базе данных. Вы генерируете / создаете слой DAL с такими методами, как -

  DTOForTable1[] GetDataFromTable1();
  DTOForTable2[] GetDataFromTable2();

и так далее ...

Вопрос

Как создать метод, который скрывает многочисленные методы для получения данных из каждой таблицы из клиентского кода? Метод, который я хотел бы, например, на сервисном или бизнес-уровне, мог бы выглядеть следующим образом:

SomeGenericDTO[] GetDataFromTable(TableTypeEnum tableTypeEnum);
  1. Как мне это сделать? Это вообще возможно?

  2. Если да для (1), это хорошая практика?

  3. Если да для (1) и (2), это упрощает или усложняет проект?

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 12 марта 2009

Вы можете определить это как:

T[] GetDataFromTable1<T>() where T:IDto
{
   // you can know the table with the type of T
}

Тем не менее, я бы предпочел использовать разные методы или даже классы для работы с ним. Вместо этого я использую шаблон репозитория, предлагаю поискать информацию о нем.

1 голос
/ 12 марта 2009

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

Шаблоны проектирования, которые помогают включать ActiveRecord и Шлюз табличных данных .

1 голос
/ 12 марта 2009

Вот как это делает мой DAL:

List<entity> customers = SQL.Read(new SearchCriteria(), new Customers());

Для выполнения объединений:

List<entity> customers = SQL.Read(new SearchCriteria(), new Customers(new Orders(new OrderDetails())));

Класс DTO сам определяет, к какой таблице обращаться, а его свойства определяют, какие столбцы получить.

Я не могу ответить, является ли это лучшей или хорошей практикой. Это практика, которая работает для меня в течение длительного времени. Нет никаких посторонних методов, таких как «GetById», «GetAll» и т. Д.

...