powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF и DAL?
25 сообщений из 33, страница 1 из 2
EF и DAL?
    #38719019
rpe4a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе всем утро, возникли у меня вопросы. Работаю с EF и коллега с которым работаем над проектом говорит, что надо в проект запилить какой-то слой доступа к данным(как я понимаю DAL). Я все никак раздуплить не могу какой в этом смысл, вот есть у меня модель, несколько примеров классов:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
/// <summary>
    /// Класс к данным таблицы QuestionBanks в базе данных 
    /// </summary>
    public class QuestionBank : ISystemField
    {
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public System.Guid QuestionBank_id { get; set; }

        [Required]
        public System.Guid Test_id { get; set; }

        [Required]
        public string QuestionBank_title { get; set; }

        [Required]
        public string QuestionBank_content { get; set; }

        [Required]
        public string QuestionBank_description { get; set; }

        public string QuestionBank_image { get; set; }
        public System.Guid? QuestionGroup_Id { get; set; }
        public System.DateTime? System_insertDT { get; set; }
        public System.Guid? System_insertAccount { get; set; }

        public virtual ICollection<AnswerBank> AnswerBank { get; set; }
        public virtual QuestionGroup QuestionGroup { get; set; }
        public virtual Test Test { get; set; }
    }

/// <summary>
    /// Класс к данным таблицы AnswerBanks в базе данных 
    /// </summary>
    public class AnswerBank : ISystemField
    {
        [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public System.Guid AnswerBank_id { get; set; }

        [Required]
        public System.Guid QuestionBank_id { get; set; }

        [Required]
        public string AnswerBank_content { get; set; }

        [Required]
        public int AnswerBank_isTrue { get; set; }

        public System.DateTime? System_insertDT { get; set; }

        public System.Guid? System_insertAccount { get; set; }

        public virtual QuestionBank QuestionBank { get; set; }
        public virtual ICollection<UserAnswer> UserAnswer { get; set; }
    }

/// <summary>
        /// Метод для получения коллекции ответов
        /// </summary>
        /// <returns></returns>
        public IQueryable<AnswerBank> GetAnswerBank()
        {
            return db.AnswerBanks;
        }

/// <summary>
        /// Метод для получения коллекции ответов для заданного вопроса
        /// </summary>
        /// <param name="question_id"></param>
        /// <returns></returns>
        public IQueryable<AnswerBank> GetAnswerBankForQuestion(System.Guid question_id)
        {
            IQueryable<AnswerBank> answerForQuestion = GetAnswerBank().Where(a => a.QuestionBank_id == question_id);

            return answerForQuestion;
        }


После чего в контроллере я на прямую могу обращаться к модели и вытягивать данные из базы. Допустим в представление я хочу передавать какие-то из этих данных, но мне не надо, чтобы на клиент уходил правильный вариант ответа на вопрос(AnswerBank_isTrue) и системные поля(System_insertDT и System_insertAccount), а только сами ответы на вопрос, я для этого создаю отдельный класс:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
/// <summary>
    /// Класс, который формирует данные(Ответы) для отправки в представление
    /// </summary>
    public class AnswerViewModel
    {
        public System.Guid id { get; set; }
        public System.Guid QuestionId { get; set; }
        public string text { get; set; }
    }


С помощью метода расширений реализую объекты этого класса
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public static class AnswerExtension
    {
        public static IEnumerable<AnswerViewModel> GetAnswerViewModels(this IQueryable<AnswerBank> answers) 
        {
            List<AnswerViewModel> result = new List<AnswerViewModel>();
            foreach (var answer in answers)
            {
                result.Add(new AnswerViewModel()
                {
                    id = answer.AnswerBank_id,
                   QuestionId = answer.QuestionBank_id,
                    text = answer.AnswerBank_content
                });
            }
            return result;
        }
    }


И в контроллере передаю их представлению. НУ и так далее, то есть, если мне надо передать на клиент, только необходимые данные из класса модели, мне приходиться создавать для этого отдельный класс, из-за чего их количество увеличивается. Кстати на сколько правильно это? Могу ли я на прямую работать с моделью без создания этих промежуточных классов, допустим где возможно пользоваться анонимными классами? Так как я по большому счету самоучка и высшее образование у меня не программиста, изучаю все по мануалам, книгам, видео-урокам. Там они, вообще, модель использую прямо в контроллере, пример:
Код: c#
1.
2.
3.
4.
5.
public ActionResult Index()
        {
            var Tests = db.Tests.ToList();
            return View(Tests);
        }


В принципе и я так делаю, поэтому коллега говорит, что так не правильно, и должен быть какой-то промежуточный слой, доступа к данным, как я себе это представляю:
Код: c#
1.
2.
3.
4.
5.
public ActionResult Index()
        {
            var Tests = getTests();
            return View(Tests);
        }


Но раздуплить, почему нельзя использовать прямое обращение к классам модели в контроллер у меня так и не получается, ведь по сути все работает нормально. Где ж я не прав? Кстати сталкивался с понятием Репозитория, что это, EF что ли не является косвенным репозиторием?? Как же правильно реализовать этот DAL и нужен ли он, вообще, в моем случае?? Может быть можно реализовать что-то похожее на DAL? Буду признателен, хоть за какую то информацию, всем хорошего дня.
...
Рейтинг: 0 / 0
EF и DAL?
    #38719059
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rpe4aи я так делаю , поэтому коллега говорит , что так не правильно
Так может он сделает , как правильно, а вы посмотрите?
...
Рейтинг: 0 / 0
EF и DAL?
    #38719069
rpe4a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79rpe4aи я так делаю , поэтому коллега говорит , что так не правильно
Так может он сделает , как правильно, а вы посмотрите?
Ну он другими деталями проекта занимается(представлением + он замутил туда AngularJS, и сейчас я даже не представляю, что это за проект, подход MVC очень размыт=))
Хотелось бы услышать как у вас реализуется этот DAL или его подобие, и есть ли он у вас вообще...
...
Рейтинг: 0 / 0
EF и DAL?
    #38719070
rpe4a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И какой будет от него прок?
...
Рейтинг: 0 / 0
EF и DAL?
    #38719076
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ответы на большинство твоих вопросов есть в этой ветке
...
Рейтинг: 0 / 0
EF и DAL?
    #38719080
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rpe4aНу он другими деталями проекта занимается
Критиковать каждый горазд.

У вас работает? Не трогайте. Или чистите код, если хватает времени. Рефакторинг называется.
В принципе контекст EF можно трактовать как DAL
...
Рейтинг: 0 / 0
EF и DAL?
    #38719085
rpe4a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.ProОтветы на большинство твоих вопросов есть в этой ветке
Спасибо, сейчас почитаю.
...
Рейтинг: 0 / 0
EF и DAL?
    #38719086
rpe4a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79rpe4aНу он другими деталями проекта занимается
Критиковать каждый горазд.

У вас работает? Не трогайте. Или чистите код, если хватает времени. Рефакторинг называется.
В принципе контекст EF можно трактовать как DAL
Хмм... интересно, а репозиторий, что тогда?
...
Рейтинг: 0 / 0
EF и DAL?
    #38719105
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rpe4aArm79пропущено...

Критиковать каждый горазд.

У вас работает? Не трогайте. Или чистите код, если хватает времени. Рефакторинг называется.
В принципе контекст EF можно трактовать как DAL
Хмм... интересно, а репозиторий, что тогда?Что, опять?
...
Рейтинг: 0 / 0
EF и DAL?
    #38719108
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rpe4a, воспользуйтесь поиском по форуму.
...
Рейтинг: 0 / 0
EF и DAL?
    #38719114
rpe4a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANArpe4a, воспользуйтесь поиском по форуму.
Опять )) Это вы четко подметили. Дак вот сижу как раз и читаю, просто не знаю с чего начать, тут куча всего.
...
Рейтинг: 0 / 0
EF и DAL?
    #38719181
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rpe4a, начинать нужно с анализа своего проекта, какте планы по его развитию и вопроса: а понадобится-ли DAL и репозиторий вообще.
...
Рейтинг: 0 / 0
EF и DAL?
    #38719183
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rpe4aпросто не знаю с чего начать.Сначала сформулируй список имеющихся проблем. Потом ищи пути их решения. Если проблем нет, то и делать ничего не надо.

Отсутствие слоя DAL само по себе вряд ли можно назвать проблемой. А товарищу своему скажи, что, как было замечено выше, EF-ный DbContext/ObjectContext при желании можно рассматривать как DAL.
...
Рейтинг: 0 / 0
EF и DAL?
    #38719221
rpe4a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей Кrpe4aпросто не знаю с чего начать.Сначала сформулируй список имеющихся проблем. Потом ищи пути их решения. Если проблем нет, то и делать ничего не надо.

Отсутствие слоя DAL само по себе вряд ли можно назвать проблемой. А товарищу своему скажи, что, как было замечено выше, EF-ный DbContext/ObjectContext при желании можно рассматривать как DAL.

Передам, спасибо. Но вот интересно, то есть ничего страшного не произойдет, если я буду какую-то логику доступа к данным буду запихивать/использовать в контроллере? К примеру как я уже описывал:
Код: c#
1.
2.
3.
4.
5.
public ActionResult Index()
        {
            var Test = db.Tests.ToList();
            return View(Test);
        }


Понятно, что операции сохранения и обновления или удаления данных в БД, скорей всего надо делать в отдельных методах. А в контроллере только их вызывать?
...
Рейтинг: 0 / 0
EF и DAL?
    #38719228
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rpe4aНо вот интересно, то есть ничего страшного не произойдет, если я буду какую-то логику доступа к данным буду запихивать/использовать в контроллере?Если логика простая, возможно, ничего плохого в этом нет. Всё зависит от задачи. Если в дальнейшем возникнут проблемы, всегда можно будет произвести выделение класса с гордым именем "репозитарий". :-)

Но в общем случае располагать прикладную логику в контроллере не рекомендуется.
...
Рейтинг: 0 / 0
EF и DAL?
    #38719250
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rpe4aДоброе всем утро, возникли у меня вопросы. Работаю с EF и коллега с которым работаем над проектом говорит, что надо в проект запилить какой-то слой доступа к данным(как я понимаю DAL). Я все никак раздуплить не могу какой в этом смысл
Никакого, у тебя и так нормально написано (почти)
1) GetAnswerViewModels переделай в Select к IQueryable
2) Добавь пейджинг, ибо записей может оказаться много

Всякие DALы и репозитории не нужны.
...
Рейтинг: 0 / 0
EF и DAL?
    #38719269
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasrpe4aДоброе всем утро, возникли у меня вопросы. Работаю с EF и коллега с которым работаем над проектом говорит, что надо в проект запилить какой-то слой доступа к данным(как я понимаю DAL). Я все никак раздуплить не могу какой в этом смысл
Никакого, у тебя и так нормально написано (почти)
1) GetAnswerViewModels переделай в Select к IQueryable
2) Добавь пейджинг, ибо записей может оказаться много

Всякие DALы и репозитории не нужны.Ну это только время покажет
...
Рейтинг: 0 / 0
EF и DAL?
    #38719303
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

Когда время покажет ТС и сам догадается.
...
Рейтинг: 0 / 0
EF и DAL?
    #38719327
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasskyANA,

Когда время покажет ТС и сам догадается.Ну или старший коллега найдёт таки время и сам расскажет, зачем в проекте понадобился DAL.
...
Рейтинг: 0 / 0
EF и DAL?
    #38719358
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAgandjustasskyANA,

Когда время покажет ТС и сам догадается.Ну или старший коллега найдёт таки время и сам расскажет, зачем в проекте понадобился DAL.
1) Старший? Скорее наоборот.
2) Не расскажет, ибо сам не понимает. Как и многие тут присутствующие.
...
Рейтинг: 0 / 0
EF и DAL?
    #38719373
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustasskyANAпропущено...
Ну или старший коллега найдёт таки время и сам расскажет, зачем в проекте понадобился DAL.
1) Старший? Скорее наоборот.
2) Не расскажет, ибо сам не понимает. Как и многие тут присутствующие.Троллить-то зачем?
...
Рейтинг: 0 / 0
EF и DAL?
    #38719379
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustas,

Это не на ваши статьи на Хабре я наткнулся? Про 7 мифов и так далее?
...
Рейтинг: 0 / 0
EF и DAL?
    #38719407
gandjustas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79gandjustas,

Это не на ваши статьи на Хабре я наткнулся? Про 7 мифов и так далее?

Мои
...
Рейтинг: 0 / 0
EF и DAL?
    #38719437
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gandjustas2) Не расскажет, ибо сам не понимает. Как и многие тут присутствующие .Например?
...
Рейтинг: 0 / 0
EF и DAL?
    #38719442
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAgandjustasskyANA,

Когда время покажет ТС и сам догадается.Ну или старший коллега найдёт таки время и сам расскажет, зачем в проекте понадобился DAL. Рассказов недостаточно. Нужен показательный пример.
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF и DAL?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]