Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
hVostt, подход хороший, но тогда получается, что проверку внутри бизнес-логики вообще не делаем, предполагая, что не можем получить невалидные данные на вход? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2014, 22:43 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
zzА как сказать контроллеру, что проверка не удалась? На счёт того "как сказать", ASP.NET MVC/WebAPI предлагает такое понятие, как ModelState, там есть свойство IsValid, и там же наименования полей и дополнительные подробности. Валидация, биндинг, провайдер значений, всё это существует отдельно, точка сборки -- контроллер (поэтому у него и такое название). При необходимости компоненты обращаются к бизнес-логике. Сама бизнес-логика обязательно внутри должна делать повторную валидацию. Но в целом подразумевается, что в БЛ заталкиваются уже валидные данные, а невалидные данные -- это исключительные ситуации, которые надо лечить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2014, 22:43 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
zzно тогда получается, что проверку внутри бизнес-логики вообще не делаем, предполагая, что не можем получить невалидные данные на вход? Обязательно делаем. И если что-то невалидное, бросаем исключение. Но эта ситуация должна исправляться, чтобы такого небыло. Это дополнительный уровень защиты для нештатных ситуаций. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2014, 22:44 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
hVostt, спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2014, 23:11 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
hVosttzzно тогда получается, что проверку внутри бизнес-логики вообще не делаем, предполагая, что не можем получить невалидные данные на вход?Обязательно делаем. И если что-то невалидное, бросаем исключение.Определись уже, делаем или не делаем, а то твоя слабая позиция мало понятна. hVosttНо эта ситуация должна исправляться, чтобы такого небыло. Это дополнительный уровень защиты для нештатных ситуаций.Это основная бизнес-логика системы. Валидация на клиенте - это необязательные бантики, которые ещё и не всегда можно сделать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 05:26 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
hVosttzzА как надо? Полностью согласен с необходимостью валидации на клиенте, но ведь бизнес-логику может дернуть (в теории) вообще кто угодно. Да хоть пользователь-мерзавец вручную составил запрос. И так получилось, что entity.A > entity.B. Как быть? Давай пока оставим бизнес-логику в покое. Возьмём пример по-проще. var result = Model.A / Model.B; Что делать? Ловить-оборачивать исключения или проверять Model.B на ноль перед выполнением операции? М? Код: c# 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 05:30 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
ИМХО валидация - это отдельный от бизнес-логики контур. И с точки зрения SOLID должен инкапсулироваться отдельным набором интерфейсов и классов. Тогда мы легко можем инжектить различную логику валиадции (различный набор проверяемых правил) в различные части системы. Пример: данные в базу может вносить пользователь через десктоп интерфейс, но также они могут прилетать пачками в наш сервис из сторонней системы. Причём пользователь а. может не иметь прав на редактирование всех атрибутов; б. может вводить данные частично (черновик), остаток вводить потом, или передавать другому пользователю(ям) с большими правами и т.п.; в. контролы уже ограничивают ввод по длине, маске, типу и проверять нужно только то, что обязательные поля заполнены. А сервис принимает уже окончательные данные, подготовленные в сторонней системе. Должен проверить каждый элемент в пачке (все атрибуты заполнены, значения корректные, длины строк не превышают максимума и т.п.) и выдать в ответ, что из 100 элементов 98 Accepted, а 2 Rejected с описанием из-за чего. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 10:01 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
Алексей К, а для тебя придумали System.Diagnostics.Contracts Код: c# 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 10:03 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
hVostthVosttПроверка делается на уровне модели. Уточню, вью-модели. Правильнее таки модели, у нас же MVC. А что, что твоя модель по сути вью-модель, не суть важно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 10:37 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
skyANAИМХО валидация - это отдельный от бизнес-логики контур. И с точки зрения SOLID должен инкапсулироваться отдельным набором интерфейсов и классов. Тогда мы легко можем инжектить различную логику валиадции (различный набор проверяемых правил) в различные части системы. Пример: данные в базу может вносить пользователь через десктоп интерфейс, но также они могут прилетать пачками в наш сервис из сторонней системы. Причём пользователь а. может не иметь прав на редактирование всех атрибутов; б. может вводить данные частично (черновик), остаток вводить потом, или передавать другому пользователю(ям) с большими правами и т.п.; в. контролы уже ограничивают ввод по длине, маске, типу и проверять нужно только то, что обязательные поля заполнены.++ skyANAА сервис принимает уже окончательные данные, подготовленные в сторонней системе. Должен проверить каждый элемент в пачке (все атрибуты заполнены, значения корректные, длины строк не превышают максимума и т.п.)Собственно, это и обсуждается: как пробрасывать ошибку внутри слоёв сервиса и как передать ошибку от сервиса к клиенту. skyANA... и выдать в ответ, что из 100 элементов 98 Accepted, а 2 Rejected с описанием из-за чего.Ну это уже конкретная ситуация, на мой взгляд, не частая. Чаще сохранение данных происходит в одной транзакции, во всяком случае у меня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 10:39 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
skyANAИМХО валидация - это отдельный от бизнес-логики контур Начинается... Любители декомпозиции взяли пулемёт. Валидация - это такая же бизнес логика, ничего накручивать не надо. Бери готовый IValidatableObject и хоть в припляс с ним танцуй и инжекть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 10:40 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
skyANAАлексей К, а для тебя придумали System.Diagnostics.Contracts Код: c# 1. 2. 3. 4. 5. Не нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 10:40 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
codearticles.ruВалидация - это такая же бизнес логика.Бизнес-логика на клиенте, ага. Клиентская валидация - это обычно необязательный бантик для удобства пользователя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 10:42 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
Алексей КskyANAАлексей К, а для тебя придумали System.Diagnostics.Contracts Код: c# 1. 2. 3. 4. 5. Не нравится.Чем? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 10:50 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
codearticles.ruskyANAИМХО валидация - это отдельный от бизнес-логики контур Начинается... Любители декомпозиции взяли пулемёт. Валидация - это такая же бизнес логика, ничего накручивать не надо. Бери готовый IValidatableObject и хоть в припляс с ним танцуй и инжекть.И что в нём готового? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 10:52 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
codearticles.ru, и ответь на вопрос: зачем в метод Validate передаётся ValidationContext? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 10:55 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
Алексей КskyANA... и выдать в ответ, что из 100 элементов 98 Accepted, а 2 Rejected с описанием из-за чего.Ну это уже конкретная ситуация, на мой взгляд, не частая. Чаще сохранение данных происходит в одной транзакции, во всяком случае у меня.При чём тут вообще транзакции? В вашей оперативной системе пользователь долго и упорно набивает 100 записей и потом разом их сохраняет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 11:09 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
skyANAАлексей Кпропущено... Ну это уже конкретная ситуация, на мой взгляд, не частая. Чаще сохранение данных происходит в одной транзакции, во всяком случае у меня.При чём тут вообще транзакции? В вашей оперативной системе пользователь долго и упорно набивает 100 записей и потом разом их сохраняет?На каждую запись, которая может содержать вложенные записи, обычно отдельная форма редактирования с сохранением в одной транзакции. Транзакции при том, что сохраняется всё или ничего, поэтому сообщение "98 Accepted, а 2 Rejected" - это другой случай для нас достаточно редкий. skyANAАлексей Кпропущено... Не нравится.Чем? :)Обхожусь родными средствами C# (if... throw...). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 11:28 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
Алексей КskyANAпропущено... При чём тут вообще транзакции? В вашей оперативной системе пользователь долго и упорно набивает 100 записей и потом разом их сохраняет?На каждую запись, которая может содержать вложенные записи, обычно отдельная форма редактирования с сохранением в одной транзакции. Транзакции при том, что сохраняется всё или ничего, поэтому сообщение "98 Accepted, а 2 Rejected" - это другой случай для нас достаточно редкий.Задам вопрос иначе: если пользователю за день надо обработать 100 чего-то и в двух случаях он допустит ошибку, то ничего из 100 чего-то не сохранится :) Алексей КskyANAпропущено... Чем? :)Обхожусь родными средствами C# (if... throw...).Хм. Звучит как: не нравится LINQ, обхожусь родными средствами C# (for... foreach...). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 12:18 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
Алексей Кcodearticles.ruВалидация - это такая же бизнес логика.Бизнес-логика на клиенте, ага. Клиентская валидация - это обычно необязательный бантик для удобства пользователя. Да, а чем тебе не нравится? unobtrusive на клиенте это очень удобно. skyANAИ что в нём готового? :) Это сковорода. Хочешь - жарь, хочешь - не жарь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 12:20 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
codearticles.ruskyANAИ что в нём готового? :) Это сковорода. Хочешь - жарь, хочешь - не жарь Ну например выше озвучивалась проверка логина пользователя при регистрации. В базе уникальный индекс и Алексей пожарит, перехватив и обернув исключение. А ты как пожаришь на IValidatableObject сковороде? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 12:29 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
skyANAАлексей Кпропущено... На каждую запись, которая может содержать вложенные записи, обычно отдельная форма редактирования с сохранением в одной транзакции. Транзакции при том, что сохраняется всё или ничего, поэтому сообщение "98 Accepted, а 2 Rejected" - это другой случай для нас достаточно редкий.Задам вопрос иначе: если пользователю за день надо обработать 100 чего-то и в двух случаях он допустит ошибку, то ничего из 100 чего-то не сохранится :)Я запутался. :-) skyANAАлексей Кпропущено... Обхожусь родными средствами C# (if... throw...).Хм. Звучит как: не нравится LINQ, обхожусь родными средствами C# (for... foreach...).Нет. Обходиться базовыми средствами C# не получается, поэтому мне нравится LINQ. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 12:46 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
codearticles.ruАлексей Кпропущено... Бизнес-логика на клиенте, ага. Клиентская валидация - это обычно необязательный бантик для удобства пользователя. Да, а чем тебе не нравится? unobtrusive на клиенте это очень удобно.Уг. На клиенте только Knockout.Validation . skyANAcodearticles.ruпропущено... Это сковорода. Хочешь - жарь, хочешь - не жарь Ну например выше озвучивалась проверка логина пользователя при регистрации. В базе уникальный индекс и Алексей пожарит, перехватив и обернув исключение. А ты как пожаришь на IValidatableObject сковороде?++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 12:49 |
|
||
|
MVC: обработка исключения в контроллере
|
|||
|---|---|---|---|
|
#18+
skyANAВ базе уникальный индекс и Алексей пожарит, перехватив и обернув исключение. Ну это феерический бред, даже без комментариев. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2014, 13:15 |
|
||
|
|

start [/forum/topic.php?fid=18&msg=38771341&tid=1356943]: |
0ms |
get settings: |
13ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 222ms |
| total: | 367ms |

| 0 / 0 |
