Найкращі практики створення шаблонів кодів помилок для корпоративного проекту в C # [закрито]


43

Я працюю над корпоративним проектом, який буде розгорнутий у багатьох SMB та Enterprise.
Підтримка цього проекту склалася б, і тому я хочу створити шаблон кодування помилок ( як коди статусу HTTP ). Це дасть змогу людям довідкової служби звернутися до документів та усунути проблеми якнайшвидше.

Які найкращі практики та рекомендації для цього?
Будь-яка допомога в цьому буде корисною.


1
Занадто багато можливих відповідей, або хороших відповідей було б занадто довго для цього формату. Будь ласка, додайте деталі, щоб звузити набір відповідей або виділити питання, на яке можна відповісти в декількох абзацах. І що ви намагалися поки що.
Бен Макдугалл

Залежить від структури вашого бізнесу. У C # ми завжди надавали користувачеві можливість надсилати нам електронну пошту StackTrace або копіювати / вставляти її з деталей повідомлення про помилку (у нас не було жорстких вимог щодо безпеки).
Сокіл

Відповіді:


69

Існує різниця між кодами помилок і значеннями повернення помилок. Код помилки призначений для користувача та довідкової служби. Значення повернення помилки - це техніка кодування, яка вказує на те, що у вашому коді сталася помилка.

Можна реалізувати коди помилок, використовуючи значення повернення помилок, але я радив би проти цього. Винятки - це сучасний спосіб повідомляти про помилки, і немає причин, чому вони не повинні містити код помилки всередині себе.

Ось як я б це організував (зауважте, що пункти 2-6 - це мовні агностики):

  1. Використовуйте спеціальний тип виключення з додатковим ErrorCodeвластивістю. Улов у головному циклі повідомить про це поле звичайним чином (файл журналу / помилка спливаюче вікно / відповідь про помилку). Використовуйте один і той же тип виключення у всьому коді.
  2. Не починайте з 1 і не використовуйте провідні нулі. Зберігайте всі коди помилок однаковою довжиною, тому неправильний код помилки легко помітити. Починати з 1000 зазвичай досить добре. Можливо, додайте провідний "E", щоб зробити його чітко ідентифікованим для користувачів (особливо корисно, коли служба підтримки повинна вказувати користувачам, як визначити код помилки).
  3. Зберігайте список усіх кодів помилок, але не робіть цього у своєму коді . Зберігайте короткий список на вікі-сторінці для розробників, який вони можуть легко редагувати, коли їм потрібен новий код. Довідкова служба повинна мати окремий список на власній вікі.
  4. Не намагайтеся застосувати структуру на кодах помилок. Завжди буде важко класифікувати помилки, і ви не хочете годинами обговорювати, чи має бути помилка в групі 45xx або в групі 54xx. Будьте прагматичними .
  5. Призначте кожен кидок у своєму коді окремим кодом. Незважаючи на те, що ви думаєте, що це одна і та сама причина, у службі довідки може знадобитися робити різні речі в різних випадках. Їм простіше мати "E1234: див. E1235" у своїй вікі, ніж змусити користувача визнати, що він зробив не так.
  6. Розбити коди помилок, якщо служба довідки попросить цього. Простий if (...) throw new FooException(1234, ".."); else throw new FooException(1235, "..");рядок у вашому коді може заощадити півтори години на довідковій службі.

І ніколи не забувайте, що мета кодів помилок - полегшити життя довідкової служби .


Я ніколи цього не робив особисто, але часто ви бачите також "кореляційні ідентифікатори", специфічні для помилок посібники, які відображаються користувачеві та також реєструються. Таким чином, ви можете легше знайти точну помилку в журналах, легше, ніж з приблизним часом та кодом помилки.
xdhmoore

Я припускаю, що, ймовірно, існує спосіб включити код помилки в ідентифікаційний код кореляції, щоб він міг слугувати читаним людиною кодом помилок для служби довідки та як ідентифікатор екземпляра помилки для розробників.
xdhmoore

Моя картина досить схожа. Але замість "E" я додав короткий текст програми. Наші рамки документації мають, наприклад, деякий Doc1234час у Main-App IrS1234. Тож мої співробітники служби технічної допомоги досить швидко допомагають моїм користувачам.
Маттіас Бургер

6

Спочатку потрібно виділити області, де можуть виникати помилки та видимі користувачеві. Потім ви можете їх документувати. Це так просто.

Ну, теоретично просто. На практиці помилки можуть траплятися в усьому проклятому місці, і звітування про них може перетворити приємний код у чудовисько ведення журналів, викидання винятків та обробку та передачу зворотних значень.

Тоді я б рекомендував двоступеневий підхід. По-перше, це вхід, лот і лоти.

По-друге, це визначити основні компоненти та їхні інтерфейси та визначити, у яких основних випадках помилок ці компоненти можуть опинитися. Потім ви можете увійти в більш помітний спосіб, коли одна з цих помилок (як ви вирішуєте помилку внутрішньо, залежить від вас - винятки або коди помилок тут не мають значення). Користувач зазвичай побачить помилку та перейде до журналів для отримання більш детальної інформації.

Той самий підхід застосовується для веб-серверів та вашого прикладу коду помилки http. Якщо користувач бачить 404 і повідомляє його про підтримку, він шукатиме в журналах відомості про те, що відбувалося, яку сторінку відвідав, коли та отримає будь-яку іншу інформацію, яку вони зможуть, з будь-якого іншого сенсу. , бути в БД, мережі або додатку.


3

Я б хотів отримати власні винятки з описовими іменами та зрозумілими повідомленнями і кидаю їх. Набагато простіше використовувати існуючу інфраструктуру винятків мови, ніж будувати підтримку для передачі кодів помилок та їх інтерпретації.


1
Я би вдячний людині, яка спростувала цю відповідь від 1 до 0, щоб хоча б дати причину ...
Стефан Біллієт

1
не було мене зворотним (неважливо, що це має значення, подолайте це), але я думаю, що існує підтримка повернення значень і в мові.
gbjbaanb

2
Для мене це важливо; якщо я помиляюся, я хотів би знати, щоб я міг дізнатися :-p Як ви маєте на увазі існуючу підтримку повернених значень? Чи не доведеться вам писати сантехніку, щоб відрізняти нормальне значення повернення від коду помилки? Переклад виключення з коду помилки на межі системи - це одне, але в основному не рекомендується жонглювати їх всередині вашої системи. Я вважаю, Прагматичний програміст згадує подібні речі.
Стефан Біллієт

1
винятки - це не гарний механізм у кожному випадку, але якщо ви вирішили використовувати помилки, ви можете або додати параметр до кожного дзвінка, або мати важливі дзвінки, які повертають код. Просто вирішіть наперед, щоб це зробити, і ви золотий. Прагматично ви закінчуєте поєднання двох повернених кодів помилок на межах (тож ви не заблоковані в одній мові) та використовуєте винятки внутрішньо.
gbjbaanb

6
Я вас не проголосував (не поспішайте, інакше всі повинні повторити це :). Якщо ви працювали або дзвонили в сервісний стіл, набагато простіше просто повідомити короткий номер, ніж повідомлення про помилку. Повідомлення про помилку гарантовано зміниться, коли воно буде передано усно.
Кодизм
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.