powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / MVC. Правильная ловля ошибок Model во View
12 сообщений из 12, страница 1 из 1
MVC. Правильная ловля ошибок Model во View
    #39736673
AndreyVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Прошу поделиться опытом бывалых разработчиков MVC по вопросу:

Модель имеет множество обращений к репозиторию. И, конечно, они могут вернуться с ошибкой ("Нет прав!" или др. ошибка по бизнес-логике, которой предостаточно в репозитории (SQL Server по факту)).
Чтобы избежать возникновения ошибок в Представлении, я делаю много конструкторов в классе Модели, чтобы Контроллер при вызове соответствующего метода Модели сразу получил все ошибки из репозитория и, затем, смог их обработать нужным образом.

Я бы хотел обойтись без множества конструкторов в Модели и вызывать методы Модели напрямую из Представления, без предварительного их выполнения в конструкторах Модели и сохранения в локальных переменных Модели.
Но как отлавливать и обрабатывать ошибки непосредственно в Представлении?
...
Рейтинг: 0 / 0
MVC. Правильная ловля ошибок Model во View
    #39736687
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо отлавливать ошибки в представлении - это не задача представления.

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

Задача представления - только отобразить данные из модели и все. Представление не должно содержать бизнес-логику.
...
Рейтинг: 0 / 0
MVC. Правильная ловля ошибок Model во View
    #39736689
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreyVPя делаю много конструкторовпокажи.
2. ИС проектируют по АРМ и ГОСТ.
Т.е. рабочее место главбуха не равно месту и view уборщицы.
Поэтому ошибок по доступу МИНИМУМ.
...
Рейтинг: 0 / 0
MVC. Правильная ловля ошибок Model во View
    #39736691
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreyVP,
Те ошибки что прорвались наверх дать райзе с кодом. Наверху автоматом редирект на страницу ошибки с текстом.... и кнопкой Вернутся.
Это по MVC без ajax и блэкджетами.
...
Рейтинг: 0 / 0
MVC. Правильная ловля ошибок Model во View
    #39736692
AndreyVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123, ну как-то так:


Код: 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.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
public class OrderHViewModel
    {
        private const int DocTypeH = 190;
        private const int CountRecordsOnPage = 10;
        private string err = "";
        private bool canE { get; set; }
        private bool canF { get; set; }
        private IEnumerable<adrMRF> adrMRF;
        private IEnumerable<WorkTypeCommon> WorkTypeCommon;
        private IEnumerable<TemplateAgreementStage> TemplateAgreementStage;
        private IEnumerable<ContractH> ContractH;
        private IEnumerable<OrderH> OrderH;
        private IList<string> editableFields;
        private IEnumerable<OrderH_object> OrderH_object;
        private IEnumerable<adrObject> adrObject;
        private decimal rateNDS;
        private PageInfo pageInfo;
        private IEnumerable<OrderH_object_work> OrderH_object_work;
        private IEnumerable<OrderH_object_equipment> OrderH_object_equipment;
        private IEnumerable<ContractH_work> ContractH_work;
        private IEnumerable<Equipment> Equipment;
        private int docFileTZ;
        private int docFilePD;

        public OrderHViewModel(IRepositoryBase RepositoryBase)
        {
            if (!RepositoryBase.UIRightForDocType(DocTypeH, "open"))
                err = "Нет прав на просмотр!";
            else
            {
                canE = RepositoryBase.UIRightForDocType(DocTypeH, "edit");
                adrMRF = RepositoryBase.adrMRF();
                WorkTypeCommon = RepositoryBase.WorkTypeCommon.Where(x => x.ID_Project != 1);
                DefaultFilterTemplateAgreementStage defFilterTAS = RepositoryBase.DefaultFilterTemplateAgreementStage(DocTypeH);
                if (defFilterTAS != null)
                    TemplateAgreementStage = RepositoryBase.TemplateAgreementStage
                            .Where(x => x.ID_TemplateAgreement == defFilterTAS.ID_TemplateAgreement)
                            .OrderBy(x => x.AgreementStageNum).ToList<TemplateAgreementStage>();
            }
        }

        public OrderHViewModel(IRepositoryBase RepositoryBase, int WTC)
        {
            canE = RepositoryBase.UIRightForDocType(DocTypeH, "edit");
            ContractH = RepositoryBase.ContractH(WTC);
        }

        public OrderHViewModel(IRepositoryBase RepositoryBase, IRepositoryOrderHL RepositoryOrderHL, int WTC, int ID_ContractH=0, int MRFID=0, int SubID=0, int RegID=0, int TownID=0, string NumOH="", int agreementOH=0, int page=0)
        {
            if (!RepositoryBase.UIRightForDocType(DocTypeH, "open"))
                err = "Нет прав на просмотр!";
            else
            {
                canE = RepositoryBase.UIRightForDocType(DocTypeH, "edit");
                if(canE)
                {
                    WorkTypeCommon = RepositoryBase.WorkTypeCommon.Where(x => x.ID == WTC);
                    ContractH = RepositoryBase.ContractH(WTC);
                }
                OrderH = RepositoryOrderHL.OrderH(0, MRFID, SubID, RegID, TownID, ID_ContractH, WTC, NumOH, agreementOH, page, CountRecordsOnPage);
                if (OrderH.Count() == 0)
                    pageInfo = new PageInfo() { CurrentPage = 1, ItemsPerPage = CountRecordsOnPage, TotalItems = 0 };
                else
                    pageInfo = new PageInfo() { CurrentPage = OrderH.FirstOrDefault().showPage, ItemsPerPage = CountRecordsOnPage, TotalItems = OrderH.FirstOrDefault().CountRows };
            }
        }

        public OrderHViewModel(IRepositoryBase RepositoryBase, IRepositoryOrderHL RepositoryOrderHL, int docType, int id)
        {
            if (!RepositoryBase.UIRightForDocType(docType, "open"))
                err = "Нет прав на просмотр!";
            else
            {
                canE = RepositoryBase.UIRightForDocType(docType, "edit");
                canF = RepositoryBase.UIRightForDocType(192, "addFile");

.................................

public object Error
        {
            get
            {
                if (err == "")
                    return HttpContext.Current.Session["err"];
                else
                    return err;
            }
        }
        public bool canEdit
        {
            get
            {
                return canE;
            }
        }
        public bool canAddFile
        {
            get
            {
                return canF;
            }
        }
        public IEnumerable<adrMRF> ieAdrMRF
        {
            get
            {
                return adrMRF;
            }
        }
        public IEnumerable<WorkTypeCommon> ieWorkTypeCommon
        {
            get
            {
                return WorkTypeCommon;
            }
        }
...
Рейтинг: 0 / 0
MVC. Правильная ловля ошибок Model во View
    #39736700
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreyVP
Код: c#
1.
private string err = "";

вперед в прошлый век?
...
Рейтинг: 0 / 0
MVC. Правильная ловля ошибок Model во View
    #39736714
AndreyVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro, т.е. делать все обращения к репозиторию и сохранять результаты в локальные переменные Модели до вызова Представления - это правильное решение?
...
Рейтинг: 0 / 0
MVC. Правильная ловля ошибок Model во View
    #39736721
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreyVPк репозиторию
Прочесть пример без репо на DBSet<T>
...
Рейтинг: 0 / 0
MVC. Правильная ловля ошибок Model во View
    #39736737
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreyVPShocker.Pro, т.е. делать все обращения к репозиторию и сохранять результаты в локальные переменные Модели до вызова Представления - это правильное решение?Да, а в чем смысл делать это из представления?
...
Рейтинг: 0 / 0
MVC. Правильная ловля ошибок Model во View
    #39736739
AndreyVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123, когда-нибудь прочту, если время будет.
Текущий проект с репозиторием успешно работает много лет и переделывать глобально ничего не хочу.
Мне кажется, что основное правило программиста это "Лучшее враг хорошего, или не трогай то, что хорошо работает".
Прошу не засорять мою тему репликами не по теме, а тема: MVC with repository
...
Рейтинг: 0 / 0
MVC. Правильная ловля ошибок Model во View
    #39736751
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProAndreyVPShocker.Pro, т.е. делать все обращения к репозиторию и сохранять результаты в локальные переменные Модели до вызова Представления - это правильное решение?Да, а в чем смысл делать это из представления?По большому счету, модель представления должен вообще формировать слой бизнес-логики, сама модель представления тоже должна содержать только то, что относится к представлению. Но в небольших проектах часто совмещают модель представления с бизнес-логикой
...
Рейтинг: 0 / 0
MVC. Правильная ловля ошибок Model во View
    #39736779
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreyVPMVC with repositoryтему читают и новички, поэтому 10 раз извинись за легаси код.
То что вместо райзе у тебя out string error тоже отмаз будет?
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / MVC. Правильная ловля ошибок Model во View
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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