|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
Есть линейный код, состоящий из последовательных команд, которые могут давать ошибки. Это достаточно критические команды обращения к внешним ресурсам и вероятность падения на них велика. Нужно, чтобы при падении определённого шага срабатывал обработчик ошибки, который бы логгировал, какой именно шаг упал, в понятном человеку виде (без Network Error at line 687), а в более понятном виде "Ошибка при считывании ..." . У кого-нибудь есть идеи как написать такой код без многократных try catch. Код: 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.
Код будет работать в SSIS пакете. Может как-то ExecuteAndLog(delegate() { код}, "текст ошибки" );? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 14:01 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
a_voronin, Обработчик ошибок на базовом уровне Application. Там же можно ловить определенный тип эксепишена и логировать по вкусу. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 14:08 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
Axelerona_voronin, Обработчик ошибок на базовом уровне Application. Там же можно ловить определенный тип эксепишена и логировать по вкусу. Мне кажется вы не поняли моего вопроса. И еще раз обращаю внимание, это SSIS пакет. Никакого класса Application не будет как в C# проектах. Тип Exception неизвестен. Это администрирующий API. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 14:31 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
У тебя каша гавнокода, такое отлаживать крайне сложно. Разбей хотя бы на 2 функции: 1. Сначала валидация с подготовкой модели 2. Потом логика на основе модели На этапе валидации (reader.GetString) отрабатываем каждое свойство и накапливаем коллекцию с ошибками. Если коллекция содержит элементы, бросаем исключение с информацией по всем ошибкам и не переходит к пункту 2. Иначе переходим к пункту 2 и начинаем работать с моделью. Мог бы посоветовать еще fluently transient exception handling , но тут SSIS пакет. Кстати, об этом нужно сразу говорить, гадалки в отпусках. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 14:42 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
МСУУ тебя каша гавнокода, такое отлаживать крайне сложно. Разбей хотя бы на 2 функции: 1. Сначала валидация с подготовкой модели 2. Потом логика на основе модели На этапе валидации (reader.GetString) отрабатываем каждое свойство и накапливаем коллекцию с ошибками. Если коллекция содержит элементы, бросаем исключение с информацией по всем ошибкам и не переходит к пункту 2. Иначе переходим к пункту 2 и начинаем работать с моделью. Мог бы посоветовать еще fluently transient exception handling , но тут SSIS пакет. Кстати, об этом нужно сразу говорить, гадалки в отпусках. Ещё раз попробую донести, это не Console Application, это не Web Service это не Web Site это не WinForms, MVC3 или что-то такое. Это скрипт встраиваемый в SSIS пакет. Давай может MVC3 прикрутим сюда? И ты серьезно считаешь, что вот это читаемо ? Но выглядит красиво. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 15:01 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
a_voroninЕщё раз попробую донести, это не Console Application, это не Web Service это не Web Site это не WinForms, MVC3 или что-то такое. Это скрипт встраиваемый в SSIS пакет. Давай может MVC3 прикрутим сюда? У тебя проблемы с пониманием или вообще с головой? Ты читаешь каким местом? МСУМог бы посоветовать еще fluently transient exception handling, но тут SSIS пакет. Для тех, кто в танке: я тебе и не предлагал в SSIS пакете использовать этот exception handling. Это было сказано для первого твоего вопроса, в котором ничего про SSIS не говорится. Будет полезно для остальных, кому интересен этот момент. Для SSIS я тебе нарисовал 2 простых правила, которому должен соответствовать твой код. a_voroninИ ты серьезно считаешь, что вот это читаемо ? Но выглядит красиво. Не мне судить, но Scott Hanselman видит в этом нечто интересное. Весьма гибкие конструкции. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 15:41 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
МСУв котором ничего про SSIS не говорится. Было, внизу ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 15:42 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
AxeleronМСУв котором ничего про SSIS не говорится. Было, внизу Точно, не увидел нижнюю строчку. Тогда берем и прикручиваем к SSIS ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 15:44 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
В любом случае, было написано это МСУМог бы посоветовать еще fluently transient exception handling, но тут SSIS пакет. Поэтому непонятны вопли про Web Service, Web Site, WinForms и MVC3. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 15:46 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
МСУAxeleronпропущено... Было, внизу Точно, не увидел нижнюю строчку. Тогда берем и прикручиваем к SSIS Так что умник, посоветуешь что-то полезное? Я пока вот так оформился. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 15:55 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
a_voroninТак что умник, посоветуешь что-то полезное? Я пока вот так оформился. Я тебе 2 пункта написал. Ты понял, о чем они? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 15:56 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
МСУa_voroninТак что умник, посоветуешь что-то полезное? Я пока вот так оформился. Я тебе 2 пункта написал. Ты понял, о чем они? Да понял. Писал бы Web форму поступил бы именно так. Однако не понял зачем мне модель, если я не собираюсь валидировать никаких данных. Есть ЗапуститьЧерныйЯщик1; ЗапуститьЧерныйЯщик2; ЗапуститьЧерныйЯщик3; ЗапуститьЧерныйЯщик4; как красиво запускать их логгируя возможные исключения? В этом мой вопрос. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 16:09 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
a_voroninДа понял. Писал бы Web форму поступил бы именно так. Однако не понял зачем мне модель, если я не собираюсь валидировать никаких данных. Да причем тут web форма, это касается вообще любого кода. В своём DTS Script Task делаешь классы, представляющие модель. И отдельный сервис валидации (класс помощник), который фетчит ридер, собирает модель, складывает ошибки. После этого анализируешь ошибки и если всё ок, дергаешь другой сервис для процессинга данных. a_voroninкак красиво запускать их логгируя возможные исключения? В этом мой вопрос. Когда в твоём коде порядок, тогда и обычные try catch будут гармонично смотреться. SafeExecute твой лапшекод лучше не сделают. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 16:18 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
МСУ И отдельный сервис валидации (класс помощник), который фетчит ридер, собирает модель, складывает ошибки. сервис валидации (класс помощник), который фетчит ридер --- сильно. Вместо 10 строк -- 500. Может лучше Entity Framework прикрутить? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 16:28 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
a_voronin, при чем тут количество строк? ты спросил как правильно и как удобно. тебе ответили, что разбивание кода на процедуры\классы лучше, чем просто процедуры небоскрёбы, где по 5 try catch как у тебя. читаемость кода от этого выигрывает, соответственно с сопровождением кода проблем не будет. Так как даже если исключение возникнет, тебе будет легко его локализовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 16:35 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
a_voroninсервис валидации (класс помощник), который фетчит ридер --- сильно. Ну если Single responsibility principle для тебя сильно, тогда мне нечего добавить. a_voroninВместо 10 строк -- 500 Ты измеряешь качество кода количеством строк? a_voroninМожет лучше Entity Framework прикрутить? Тебе виднее, поэтому вопрос не по адресу. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 16:38 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
МСУa_voroninсервис валидации (класс помощник), который фетчит ридер --- сильно. Ну если Single responsibility principle для тебя сильно, тогда мне нечего добавить. a_voroninВместо 10 строк -- 500 Ты измеряешь качество кода количеством строк? a_voroninМожет лучше Entity Framework прикрутить? Тебе виднее, поэтому вопрос не по адресу. Есть задача -- посадить растение 10 см в высоту. Уместный инструмент -- лопата. Есть задача -- выкопать котлован 100 в длину. Уместный инструмент -- экскаватор. Ты же мне говоришь -- та ты что рихнулся в век экскаваторов сажать огурцы с помощью лопаты. Тут надо прочитать список серверов. Всё. Прочитать -- не записать, не провалидировать, а прочитать. Тут модель-то заводить не обязательно, а ты про Single responsibility principle затеял. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 16:48 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
a_voroninЕсть задача -- посадить растение 10 см в высоту. Уместный инструмент -- лопата. Есть задача -- выкопать котлован 100 в длину. Уместный инструмент -- экскаватор. 1. Что ж ты при такой элементарной задаче в 10 см просишь у форума помощи? Значит, начинаешь испытывать проблемы с гавнокодом? 2. Завтра тебя просят нарастить растение еще на 10 см, и твой карточный домик схлопывается. Когда пишешь лапшекод, ты заранее себя обрекаешь на гибель. 3. Повторяю еще раз, если ты считаешь, что концепция single responsibility principle - котлован, то можешь отправляться сразу в детский сад, там тебе всё объяснят. a_voroninТы же мне говоришь -- та ты что рихнулся в век экскаваторов сажать огурцы с помощью лопаты. Ты реально отмороженный? :) Хвост Коллега, заходи. Тут новое тело для битья, заодно потренируешься на ламерах обезьянках ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 17:01 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
МСУТы реально отмороженный? :) От отмороженного слышу. Я спросил про try catch , а ты про валидацию модели лекцию затеял. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 17:05 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
a_voroninЯ спросил про try catch , а ты про валидацию модели лекцию затеял. У тебя "оптимизация" (как всегда) через задний проход начинается. То есть ты не решаешь проблему, а пытаешься её обернуть в этикетку. Дело твоё, тебе дали советы. Не понимаешь советы - ну можешь убиться об стену. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2015, 17:25 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2015, 00:41 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
Для начала, у приложения, которое я пишу, код на .NET C# составляет лишь 2-3%. А вы пытаетесь загнать слона в посудные лавки. Там, где надо 1 2 3 4 выполнить и 2 + 2 посчитать, мега архитектуру привинтить хотите. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2015, 12:53 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
a_voroninДля начала, у приложения, которое я пишу, код на .NET C# составляет лишь 2-3%. А остальное что? Там, где надо 1 2 3 4 выполнить и 2 + 2 посчитать, мега архитектуру привинтить хотите. Кусок кода из первого поста не сильно похож на 2 + 2. Но если это так, то какой смысл чего-то там уплотнять в блоках try-catch, если оно 2+2 и 2% от общей массы? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2015, 12:58 |
|
как красивей записать без громоздких try catch
|
|||
---|---|---|---|
#18+
Pallarisa_voroninДля начала, у приложения, которое я пишу, код на .NET C# составляет лишь 2-3%. А остальное что? Там, где надо 1 2 3 4 выполнить и 2 + 2 посчитать, мега архитектуру привинтить хотите. Кусок кода из первого поста не сильно похож на 2 + 2. Но если это так, то какой смысл чего-то там уплотнять в блоках try-catch, если оно 2+2 и 2% от общей массы? Pallaris, SSIS пакеты, база SQL Server 2014, OLAP кубы, SQL Server Agent джобы. Просто у SSIS уже есть своя архитектура классов. Там есть свой Framework и переписывать его не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2015, 13:11 |
|
|
start [/forum/topic.php?fid=20&fpage=91&tid=1401766]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
23ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 138ms |
0 / 0 |