2016-10-24 7 views
2

Я занимаюсь 3-х уровневым приложением с использованием asp.net mvc, и я хочу делать все, как рекомендовано.Уровень бизнес-логики нуждается в собственных моделях или нет

Итак, я сделал MvcSample.Bll для бизнес-логики, MvcSample.Data для данных и MvcSample.Web для сайта.

В Data У меня есть файл edmx (я использую первый подход к базе данных) и мои репозитории. И в Bll Я делаю услуги, которые вызывают в сети.

Итак, мой вопрос: Должен ли я писать другие модели в Bll или использовать те, которые сгенерированы в файле edmx?

+1

Сделайте себе одолжение и не используйте репозитории с EF – Stilgar

+0

* Должен ли я писать другие модели в Bll * Что я предполагаю, что вы говорите об объекте, а не о модели. –

+0

вы столкнетесь с проблемами сериализации (если попытаетесь сериализовать любую из таблиц) со ссылками, поскольку некоторые свойства могут быть виртуальными и самореализованными. Должно идти с пользовательскими моделями. – Manoj

ответ

0

С моей точки зрения, вам нужна еще одна модель для вашего Bll.

Это полностью закрыло бы ваш Bll.

0

Я думаю, что нет правильного или неправильного ответа на ваш вопрос.

По моему опыту, я использовал оба варианта. Давайте посмотрим на примере ниже:

У меня есть User стол

public class User 
{ 
    public int Id{get;set;} 
    public string First_Name{get;set;} 
    public string Last_Name{get;set;} 
    public int Age{get;set;} 
    public string Password{get;set;} //let's use this for demonstration 
} 

У меня есть вызов метода DisplayAll() в Bll. Этот метод должен перечислять всех пользователей в моей базе данных с помощью полных имен (FirstName + LastName) и их возрастов. я не должен возвращать User класс, потому что он выставит пароль, а я создаю новый класс UserDto

public class UserDto 
{ 
    public string FullName{get;set;} 
    public int Age{get;set;} 
} 

Так вот мой DisplayAll():

public List<UserDto> DisplayAll() 
{ 
    List<UserDto> result = ctx.User //my DbContext 
        .Select(x => new UserDto() 
        { 
        FullName = x.First_Name + " " +Last_Name, 
        Age = x.Age 
        } 
    return result; 
} 

Так как вы можете видеть, мой метод DisplayAll() использует как User и UserDto

-1

Мой подход будет

MvcSample.Data 
-- Model Classes 
-- EDMX attach to model 
MvcSample.Bll 
-- Model Inheriting MvcSample.Data.Model 
-- Business Logic Class - Using MvcSample.Bll.Model 
MvcSample.Web 
-- Controller using MvcSample.Bll.Model 
+0

почему проголосовали и кто? –

0

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

0

Вы можете использовать 3 уровневую архитектуру в asp.net таким образом

  • MvcSample.BLL - бизнес-логики
  • MvcSample.DAL - слой домена
  • MvcSample.web - - Уровень доступа
  • MvcSample.Domain данных сайта

Все ваши классы репозитория включены ding в слое .BLL.Это означает, что здесь хранятся ваши логики. Обычно .DAL используется для хранения классов .edmx. .Domain использует для воссоздания объектов базы данных, которые полезны для серверной части. Это означает, что вы передаете объект json от клиента к серверу. Затем этот объект должен быть создан на стороне сервера. Эти классы могут быть реализованы в

1

Это зависит от типа проблемы, которую пытается решить ваше приложение.

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

Модель Entity Framework представляет вашу реляционную базу данных. Из-за этого в его определении содержится много вещей, которые ваша бизнес-логика не должна раскрывать, например свойства навигации, вычисленные свойства и т. Д. При принятии объекта модели в качестве аргумента вы можете заметить, что многие свойства не используются конкретным бизнес-логическим методом , Во многих случаях это путает разработчика и является источником ошибок.

В целом, если ваше приложение является быстрым прототипом, доказательством концепции или простым программным обеспечением CRUD, чем этого может быть достаточно для использования классов модели EF. Однако с практической точки зрения рассмотрим модель бизнес-логики/классы dto.

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

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