Отдельные бизнес-классы или классы сущностей, сгенерированные Linq to SQL - PullRequest
0 голосов
/ 07 декабря 2010

Мне нужно начать проект, в котором база данных с резервной копией - это SQL Server, и я использую .Net Framework 3.5.

Я решил использовать LINQ to SQL для уровня доступа к данным.Должен ли я записывать отдельные классы в слой Use for Business и Presentation, или я использую автоматически сгенерированные классы сущностей с помощью LINQ to SQL.

Ответы [ 2 ]

3 голосов
/ 07 декабря 2010

Сначала я использую Entity Framework Code, но следующая концепция одинакова ( для нетривиальных проектов ):

Я всегда держу свои классы DAL вне своих реальных бизнес-уровней.Таким образом, это уменьшает влияние изменений БД на ваше приложение.Я никогда не использую классы DAL нигде, кроме своего проекта DAL.

В моем текущем проекте используется DDD, любая компоновка похожа на следующую (очень упрощенно):

MainApp                    
MainApp.Domain             
   |...IRepositories
   |...AggregrateX
   |...AggregrateY
MainApp.Dal            
   |...Models
   |...Repositories 
  • MainApp - Может видеть домен, но не DAL
  • MainApp.Dal - может видеть домен, но не MainApp

Методы хранилища DAL используют AutoMapper:

public Customer Get(int customerId)
{
    using (var context = GetContext())
    {
        var entity = context.Customers.Where(x=> 
            x.CustomerId == customerId).Single();

        return Mapper.Map<DtoCustomer, Customer>(entity);
    }
}

public void Save(Customer customer)
{
    using (var context = GetContext())
    {
        var entity = context.Customers.Where(x=> 
            x.CustomerId == customer.CustomerId).Single();

        Mapper.Map(customer, entity);
        context.SaveChanges();
    }
}

Таким образом, допускается полное разделение между моими бизнес-классамии мои настоящие объекты DAL / DTO.Теоретически он позволяет изменять весь бэкэнд, не затрагивая бизнес-логику.Что я не показал, так это то, что я также гарантирую, что доменные / бизнес-объекты никогда не будут видны на уровне представления, когда я сопоставляю модели ввода / просмотра, а не через фасад.

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

Однако это действительно имеет смысл только для крупных проектов.Я бы просто использовал классы DAL для тривиальных / небольших проектов.

0 голосов
/ 07 декабря 2010

Я могу рассказать вам, что мы сделали. Мы используем L2S для наших производственных приложений следующего поколения. Мы глобальная компания по производству солнечной энергии за 2,5 миллиарда долларов. У нас есть два набора объектов. У нас есть наши объекты L2S, которые мы строго используем в нашем «бэкэнде» Затем у нас есть гораздо более легкий набор сущностей приложений / доменов, которые используются в наших клиентских приложениях и передаются туда и обратно на наш сервер.

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

Очень хорошо работает для нас.

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