Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Правильная структура ASP.NET MVC приложения / 25 сообщений из 40, страница 1 из 2
23.03.2015, 13:39
    #38913358
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
всем привет.
Уважаемые "ГУРУ" можно по задавать немного "глупых" вопросов, отсюда Посоветуйте open-source проект на ASP.net MVC я взял для примера "NoopCommerce", в своем приложении сделал "разслоение" на следующие проекты:
"Core" - здесь DAL, и Domain model;
"Data" - здесь DbContext и реализация интерфейса репозитория;
"Service" - здесь работа с моделью
ну и "Web" - ASP.NET MVC проект
где должны быть классы описывающие ViewModel? в Web?
как заложить логику доступности тех или иных операций(Добавление/Редактирование/Удаление)?
в голову приходит только добавление признака возможности операции и в сервисном слое возвращать список с уже установленными признаками? только это спрячет кнопку но не возможность в строке адреса указания метода, здесь я вижу тока вынесения проверки на доступность той или иной операции в отдельную функцию и при вызове метода выполнять данную проверку. если не сложно то по возможности приведите пример как бы это сделали Вы, с поправкой на новичка:).заранее спасибо
...
Рейтинг: 0 / 0
23.03.2015, 14:48
    #38913530
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
bald56rusгде должны быть классы описывающие ViewModel? в Web?

да

bald56rusкак заложить логику доступности тех или иных операций(Добавление/Редактирование/Удаление)?

в простом случае на уровне ролей и атрибута [Authorize(Roles="Editor")] для каждого метода/контроллера

bald56rusв голову приходит только добавление признака возможности операции и в сервисном слое возвращать список с уже установленными признаками? только это спрячет кнопку но не возможность в строке адреса указания метода, здесь я вижу тока вынесения проверки на доступность той или иной операции в отдельную функцию

при работе с ASP.NET MVC/WebAPI запомни одно правило: если что-то можно оформить/закодить в виде фильтра, значит делай фильтр! Этот фреймворк очень широко использует аспекты, которыми надо пользоваться на всю катушку.

Т.е. если тебе не хватает стандартного атрибута (фильтра) Authorize, которому список ролей надо указывать сразу, а у тебя данные о доступности операций для пользователя хранятся как-то иначе, значит делай свой фильтр MyAuthorize, который берёт текущего пользователя, и определяет доступна ли данная операция (операцию можно указывать в параметрах атрибута или вытаскивать из мета-данных экшена).

Конкретный пример дать не могу, так как мало информации. Постарайся сделать что-нибудь сам, если что-то будет получаться/неполучаться, скидывай сюда, обсудим.
...
Рейтинг: 0 / 0
23.03.2015, 17:10
    #38913813
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
hVostt добавлю немного конкретики:
есть следующий набор класов:
Код: 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.
public class Operation : BaseEntity
    {
        public int ProductId { get; set; }
        public string Detail { get; set; }
        public string Description { get; set; }
        public string Number { get; set; }
        public int EquipmentId { get; set; }
        public int UnitId { get; set; }
    }

public class Program: BaseEntity
    {
        public int OperationId { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public int ActId { get; set; }
        public DateTime Created { get; set; }
        public int CreatorId { get; set; }
    }

public class Acts: BaseEntity
    {
        public string Number { get; set; }
        public bool IsPublish { get; set; }
        public bool IsArchive { get; set; }
    }


для одной операции может быть от 1 до n программ. программы могут быть утверждены актом. мне необходимо заложить след. логику. запретить редактирование операции при наличии прикрепленных программ если программы утверждена. в остальных т.е. здесь логика не на уровне доступа пользователя а по опр. условия. как это можно сделать?
...
Рейтинг: 0 / 0
23.03.2015, 18:39
    #38913953
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
bald56rusв своем приложении сделал "разслоение" на следующие проекты:
"Core" - здесь DAL, и Domain model;
"Data" - здесь DbContext и реализация интерфейса репозитория;
"Service" - здесь работа с модельюА что такое у Вас DAL, что он делает в Core, если "реализация интерфейса репозитория" в Data?
bald56rusну и "Web" - ASP.NET MVC проект
где должны быть классы описывающие ViewModel? в Web?Да в Web.
bald56rusкак заложить логику доступности тех или иных операций(Добавление/Редактирование/Удаление)?Можно как отдельный SecurityService в DomainModel.
...
Рейтинг: 0 / 0
23.03.2015, 18:47
    #38913967
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
skyANA, в 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.
public interface IRepository<T> where T: class
    {
        /// <summary>
        /// Get entity by identifier
        /// </summary>
        /// <param name="id">Identifier</param>
        /// <returns>Entity</returns>
        T GetById(object id);

        /// <summary>
        /// Insert entity
        /// </summary>
        /// <param name="entity">Entity</param>
        void Insert(T entity);

        /// <summary>
        /// Insert entities
        /// </summary>
        /// <param name="entities">Entities</param>
        void Insert(IEnumerable<T> entities);

        /// <summary>
        /// Update entity
        /// </summary>
        /// <param name="entity">Entity</param>
        void Update(T entity);

        /// <summary>
        /// Delete entity
        /// </summary>
        /// <param name="entity">Entity</param>
        void Delete(T entity);

        /// <summary>
        /// Delete entities
        /// </summary>
        /// <param name="entities">Entities</param>
        void Delete(IEnumerable<T> entities);

        /// <summary>
        /// Gets a table
        /// </summary>
        IQueryable<T> Table { get; }
    }


а в Data у меня реализация этого интерфейса, пример из проекта который указал в первом сообщении.а можно поподробнее про SecurityService, если несложно то с примером.заранее спасибо
...
Рейтинг: 0 / 0
23.03.2015, 18:49
    #38913970
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
bald56rus,
Data и DAL - это единый слой.
...
Рейтинг: 0 / 0
23.03.2015, 22:15
    #38914180
AlexKuk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
Здесь показана очень хорошо архитектура:

http://efmvc.codeplex.com/

https://github.com/EgorBo/CrossChat-Xamarin.Forms
...
Рейтинг: 0 / 0
24.03.2015, 00:31
    #38914254
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
bald56rusдля одной операции может быть от 1 до n программ. программы могут быть утверждены актом. мне необходимо заложить след. логику. запретить редактирование операции при наличии прикрепленных программ если программы утверждена. в остальных т.е. здесь логика не на уровне доступа пользователя а по опр. условия. как это можно сделать?


Алгоритм фильтра:

1. Получить в параметрах фильтра тип действия (чтение, редактирование, удаление)
2. Получить в зависимостях фильтра сервис для доступа к операциям
3. Извлечь из контекста контроллера, который передан фильтру, параметры действия (например, ID операции)
4. Извлечь операцию из сервиса по ID (сервис в свою очередь достанет её из репозитория)
5. Сделать необходимые проверки операции (проверить наличие прикреплённых программ)
6. В зависимости от переданного типа действия в параметрах фильтра разрешить или запретить это действие

Потом юзаешь этот фильтр на действиях контроллера.
...
Рейтинг: 0 / 0
24.03.2015, 12:06
    #38914738
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
hVosttbald56rusдля одной операции может быть от 1 до n программ. программы могут быть утверждены актом. мне необходимо заложить след. логику. запретить редактирование операции при наличии прикрепленных программ если программы утверждена. в остальных т.е. здесь логика не на уровне доступа пользователя а по опр. условия. как это можно сделать?


Алгоритм фильтра:

1. Получить в параметрах фильтра тип действия (чтение, редактирование, удаление)
2. Получить в зависимостях фильтра сервис для доступа к операциям
3. Извлечь из контекста контроллера, который передан фильтру, параметры действия (например, ID операции)
4. Извлечь операцию из сервиса по ID (сервис в свою очередь достанет её из репозитория)
5. Сделать необходимые проверки операции (проверить наличие прикреплённых программ)
6. В зависимости от переданного типа действия в параметрах фильтра разрешить или запретить это действие

Потом юзаешь этот фильтр на действиях контроллера.
дошел до 4 пункта. что то не соображу как в фильтр передать сервис. в инете в примере что то типа такого:
Код: c#
1.
private IOperationService _operationService = new OperationService();


но я так понимаю это не есть хорошо.подскажите пож.
...
Рейтинг: 0 / 0
24.03.2015, 14:41
    #38915032
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
вопрос снимается.
...
Рейтинг: 0 / 0
26.03.2015, 06:54
    #38917195
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
hVostt, можно уточню насчет фильтров.более или менее разобрался. как лучше оформить фильтр:
единый фильтр в котором заложена вся логика(т.е. фильтр на контроллер), либо разбиение на мелкие фильтры для каждого конкретного действия. я больше склоняюсь ко второму. заранее спасибо
...
Рейтинг: 0 / 0
26.03.2015, 07:34
    #38917205
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
bald56rushVostt, можно уточню насчет фильтров.более или менее разобрался. как лучше оформить фильтр:
единый фильтр в котором заложена вся логика(т.е. фильтр на контроллер), либо разбиение на мелкие фильтры для каждого конкретного действия. я больше склоняюсь ко второму. заранее спасибо

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

Ещё вариант сделать параметризованный фильтр. Т.е. сам код фильтра один, но он применяется к каждому конкретному действию, но с разными параметрами -- это самый удобный компромисс. Меньше кода, больше гибкости.
...
Рейтинг: 0 / 0
26.03.2015, 13:26
    #38917653
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
hVostt, а можно пример параметризованного фильтра(если не сложно), и еще вопрос, не знаю как сформулировать попробую так:
я нахожусь по определенному URL( http://localhost:51882/Operations/Details/1) на данной страничке у меня есть ссылки на методы действий в другом контроллере, как мне вернуться суда же после выполнения методов? Заранее спасибо
...
Рейтинг: 0 / 0
26.03.2015, 13:29
    #38917660
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
bald56rusя нахожусь по определенному URL( http://localhost:51882/Operations/Details/1) на данной страничке у меня есть ссылки на методы действий в другом контроллере, как мне вернуться суда же после выполнения методов? Заранее спасибо

В плане это?
Код: c#
1.
return RedirectToAction("Action", "Controller");
...
Рейтинг: 0 / 0
26.03.2015, 13:43
    #38917681
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
Axeleron, да так я умею, возвращать из метода.было интересно услышать как делают более опытные люди.это же наверно не единственный способ, я так подразумеваю что есть иной способ: например я перехожу по ссылке, и попадаю в окно авторизации, после успешного логина меня возвращает туда куда я шел первоначально. термина не знаю.поэтому пишу так как понимаю сам
...
Рейтинг: 0 / 0
26.03.2015, 13:46
    #38917684
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
bald56rusAxeleron, да так я умею, возвращать из метода.было интересно услышать как делают более опытные люди.это же наверно не единственный способ, я так подразумеваю что есть иной способ: например я перехожу по ссылке, и попадаю в окно авторизации, после успешного логина меня возвращает туда куда я шел первоначально. термина не знаю.поэтому пишу так как понимаю сам
Какая задача? Конкретнее можно, что именно нужно? Или просто чего-то понавороченнее хочется?
...
Рейтинг: 0 / 0
26.03.2015, 13:48
    #38917687
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
bald56rusAxeleron, да так я умею, возвращать из метода.было интересно услышать как делают более опытные люди.это же наверно не единственный способ, я так подразумеваю что есть иной способ: например я перехожу по ссылке, и попадаю в окно авторизации, после успешного логина меня возвращает туда куда я шел первоначально. термина не знаю.поэтому пишу так как понимаю сам

для обратной ссылки в параметрах Url можно передавать returnUrl:

Код: c#
1.
return RedirectToAction("Action", "Controller", new {returnUrl = "/"});



А затем после выполнения действия возвращать пользователя на переданный параметр returnUrl
...
Рейтинг: 0 / 0
26.03.2015, 13:51
    #38917690
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
bald56rusа можно пример параметризованного фильтра(если не сложно)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
public class MyFilterAttribute : ActionFilterAttribute
{
   public string MyParameter1 {get;set;}
   public string MyParameter2 {get;set;}
   ...
}


...

public class MyController : Controller
{
    [MyFilter(MyParameter1 = "some", MyParameter2 = "some2")]
    public ActionResult MyAction()
    {
    }
}
...
Рейтинг: 0 / 0
26.03.2015, 14:13
    #38917715
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
Axeleronbald56rusAxeleron, да так я умею, возвращать из метода.было интересно услышать как делают более опытные люди.это же наверно не единственный способ, я так подразумеваю что есть иной способ: например я перехожу по ссылке, и попадаю в окно авторизации, после успешного логина меня возвращает туда куда я шел первоначально. термина не знаю.поэтому пишу так как понимаю сам
Какая задача? Конкретнее можно, что именно нужно? Или просто чего-то понавороченнее хочется?
конкретная задача:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
public class Operation
{
        public int Id {get;set;}
        public string Name {get;set;}
        public string UnitFullName {get;set;}
        //другие поля

        public virtual ICollection<Program> ProgramList {get;set;}
}

public class Program
{
        public int Id {get;set;}
        public int OperationId {get;set;}
        public string Name {get;set;}
        public string Description {get;set;}

        public virtual Operation Operation {get;set;}
}



Index.cshtml список операций, по кнопке Detail отображаю детальную инфу: какая то инфа по операции, плюс список программ для данной операции, в данном детальном окне возможно создать/редактировать программу, т.е. у меня есть методы которые позволяют это сделать, т.е. из окна детальной инф. об операции я попадаю в окно создания/редактирования программы, после успешного выполнения операции создания/редактирования вернуться в окно детальной информации с которого все начиналось. как то так.
...
Рейтинг: 0 / 0
26.03.2015, 14:34
    #38917745
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
bald56rus,
Ну и в чем заключается проблема? В определении откуда пришел, чтобы вернуться обратно после успешного выполнения операции создания/редактирования в окно детальной информации с которого все начиналось?
Если так, то сделайте как посоветовал hVostt выше, передавая url для возврата и используйте его для построение Html.ActionLink.
А по поводу Вашей модели - там, похожу, рекурсия, что неправильно.
...
Рейтинг: 0 / 0
26.03.2015, 14:57
    #38917782
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
Axeleronbald56rus,
Ну и в чем заключается проблема? В определении откуда пришел, чтобы вернуться обратно после успешного выполнения операции создания/редактирования в окно детальной информации с которого все начиналось?
Если так, то сделайте как посоветовал hVostt выше, передавая url для возврата и используйте его для построение Html.ActionLink.
А по поводу Вашей модели - там, похожу, рекурсия, что неправильно.
по поводу совета выше я понял, просто Вы просили конкретнее я и написал. не знал как это сделать поэтому спросил.а можно конкретнее по поводу неправильности модели!? почему не правильно? для одной операции может быть несколько программ, для конкретной программы можно получить операцию для которой она применяется. данные навигационные поля я планирую использовать в связке с "AutoMapper"ом для построения "представления"
...
Рейтинг: 0 / 0
26.03.2015, 15:01
    #38917789
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
bald56rusпочему не правильно? для одной операции может быть несколько программ, для конкретной программы можно получить операцию для которой она применяется.
Тогда норм :)
...
Рейтинг: 0 / 0
31.03.2015, 18:30
    #38923064
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
подскажите пож. кто как делает фильтрацию данных?! т.е. у меня есть следующая модель
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class OperationListModel
    {
        public int Id { get; set; }
        [Display(Name = "Изделие")]
        public string ProductName { get; set; }
        [Display(Name = "Обозначение техпроцесса")]
        public string Detail { get; set; }
        [Display(Name = "Наименование")]
        public string Description { get; set; }
        [Display(Name = "№ оп.")]
        public string Number { get; set; }
        [Display(Name = "Оборудование")]
        public string EquipmentName { get; set; }
        [Display(Name = "Подразделение")]
        public string UnitFullName { get; set; }
    }


хочу предоставить пользователю возможность фильтровать по указанным полям, как это сделать, если можно то с примером. заранее спасибо
...
Рейтинг: 0 / 0
31.03.2015, 18:37
    #38923069
Axeleron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
bald56rus,
Создать action method в контроллере и передавать модель в него, а контролер уже валидирует данные и посылает запрос в БД на выборку данных по фильтру.
...
Рейтинг: 0 / 0
31.03.2015, 18:46
    #38923075
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Правильная структура ASP.NET MVC приложения
Axeleronа контролер уже валидирует данные и посылает запрос в БД на выборку данных по фильтру

не-не. контроллер превращает полученные данные на фильтрацию в объект, содержащий фильтры, сортировку и пейджинг и отправляет это всё в бизнес-логику. последняя делает всё, что требуется, возвращает данные, которые контроллер намапливает во вью-модель и отдаёт во вью или клиенту.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Правильная структура ASP.NET MVC приложения / 25 сообщений из 40, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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