C #: сервисы обращаются к классу провайдера данных, выполняющему операторы sql - правильный подход? - PullRequest
0 голосов
/ 05 июля 2010

это общий и / или хороший подход?

В моем ViewModel (Wpf) или Presenter (WinForms) я делаю это:

ICustomerService customerService = MyService.GetService<ICustomerService>();
ICustomerList customerList = customerService.GetCustomers();

класс CustomerService выглядит следующим образом:

public class CustomerService : ICustomerService
{
     public ICustomerList GetCustomers()
     {
        return _customerDataProvider.GetCustomers();
     }
}

public class CustomerDataProvider()
{
    public ICustomerList GetCustomers()
    {
       // Open SQL connection,
       // get back a SqlDataReader and iterate it
       // in the loop write all data into a ICustomer object
       // add the ICustomer object to the ICustomerList
       // return ICustomerList object... 
    }
}

Ответы [ 2 ]

1 голос
/ 05 июля 2010

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

Я обычно иду в LINQ прямо в клиенте:

 sp_GetCustomersResult customers;
 using (var db = new DbDataContext(ConnectionString))
      customers = db.sp_GetCustomers();

Это работает довольно хорошо и позволяет мне сосредоточиться на добавлении ценности клиента вместо слоев доступа к базе данных.

0 голосов
/ 06 июля 2010

Я не нашел большого значения в объявлении интерфейсов для бизнес-классов или для пользовательских коллекций, так как стали доступны методы расширения.Я бы получил GetCustomers return IEnumerable<Customer>.

Если вы планируете интенсивно работать с бизнес-объектами, вам следует изучить использование сопоставителя объектов / отношений, такого как NHibernate .Или используйте LINQ2SQL или Entity Framework, чтобы уменьшить количество повторяющихся кодов, которые вы должны написать.

...