2011-01-26 7 views
1

Ниже приведен метод из моего консольного приложения, вызывающего метод DAL. Каков наилучший способ обернуть это в BLL-методе, чтобы его можно было вызывать непосредственно из презентации? Я работал над проектами в прошлом, где мы все называли из DAL, например, ниже, но лучше ли было бы получить все от BLL?Лучшая практика (упрощение), чтобы обернуть метод, возвращающий список продуктов из DAL в BLL

public static void getAllProducts(int ID) 
{ 
    List<Product> productList = new List<Product>(); 
    ProductDA productDA = new ProductDA(); 

    productList = productDA.GetAllProducts(ID); 

    foreach (Product product in productList) 
    { 
     Console.WriteLine(" ProductID:" + product.ProductID); 
     Console.WriteLine(" Product Name:" + product.ProductName); 
     Console.WriteLine(" Product Date:" + product.ProductDate); 
    } 
} 

ответ

0

Лучший способ совсем нет.

  • Это должен быть метод Get, который является IQueryable.

Затем вы можете открыть его через службу репозитория в бизнес-слое, который ... имеет Get: IQueryable снова.

Это позволит пользователям писать:

Get() .где (х => x.ProductId = 223 || x.ProductName.StartsWith ("someproduct")).

Гибкий.

+0

Почему IQueryable и не IEnumerable <>? DAL, очевидно, уже возвращает список? – StampedeXV

+2

Я бы не согласился с этим. Если вы передадите IQueryables, у вас нет различий между слоями. Этот IQueryable может быть изменен и фактически запущен из любой точки вашего стека. При использовании репозитория я бы ожидал, что IEnumerable будет передан обратно. –

+2

Гибкий, но полностью неэффективный. Если вы не можете управлять запросами, вы получите полные таблицы дампов/запросов, которые не используют индексы/запросы, которые просят базу данных делать преобразования, которых она не должна. –

1

Если большая часть проекта получает данные из хранимых процедур, уже построенных и в Production, которые работают нормально, было бы лучше всего просто refrence DAL, а не двойное обертывание вещей в BLL?

+0

Мое решение: вернуть тип списка AND, чтобы добавить .ToList() к моему для каждого итератора. Любые возражения/комментарии кто-нибудь? public static Список GetAllProducts (int ID) {Список ProductList = новый Список (); ProductDA ProductDA = новый продуктDA(); ProductList = ProductDA.GetAllProducts (ID); foreach (продукт продукта в ProductList.ToList()) {ProductList.Add (Product);} return ProductList; } – midnightCoder

 Смежные вопросы

  • Нет связанных вопросов^_^