Кращі практики та рекомендації щодо обробки винятків? [зачинено]


12

Я думаю, що дві основні проблеми з моїми програмами - це моя структура / організація коду та обробка помилок. Я читаю Code Complete 2, але мені потрібно щось прочитати для роботи з потенційними проблемами.

Наприклад, на веб-сайті, якщо щось може статися, лише якщо користувач підробляє дані через javascript, ви це пишете? Також коли ви не ловите помилок? Коли ви пишете клас, який очікує, що рядок і int є вхідними, і вони не є рядком та int, чи перевіряєте ви це чи дозволите йому міхур до методу виклику, який передав неправильні параметри?

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


1
яку платформу мови та розробки ви використовуєте?
Юсубов

1
Я думаю, що "Чистий код" має добру главу щодо цієї проблеми
Hoàng Long

Що сказав @ElYusubov Деталі впровадження та стандарти мови / платформи, з якими ви маєте справу, сильно впливають на найкращі практики.
vaughandroid

Відповіді:


12

Одне з добрих речей, які слід пам’ятати, - це обробка виключень when there is a need.

Для платформи розробки .NET просто дотримуйтесь інструкцій MSDN - Найкращі практики поводження з винятками , а також перегляньте цю приємну статтю про проект кодового проекту .

Однак наступні вказівки здебільшого стосуються будь-якої платформи розвитку:

  • Не керуйте бізнес-логікою за винятком. Використовуйте натомість умовні заяви. Якщо керування можна виконати за допомогою оператора if-else чітко, не використовуйте винятки, оскільки це знижує читабельність та продуктивність (наприклад, нульовий контроль, розділення на нульовий контроль). .

  • Назви винятків повинні бути чіткими та значущими із зазначенням причин виключення.

  • Викидайте винятки для умов помилок під час впровадження методу. Наприклад, якщо ви повернете значення -1, -2, -3 і т.д. замість FileNotFoundException, цей метод неможливо зрозуміти.

  • Ловіть конкретні винятки замість вищого класу винятків. Це призведе до додаткової продуктивності, читабельності та більш конкретної обробки винятків.

  • Контроль нуля з умовними умовами не є альтернативою лову NullPointerException. Якщо метод може повернути нуль, керуйте ним за допомогою оператора if-else. Якщо повернення може кинути NullPointerException, схопіть його.

  • Намагайтеся не перекидати виняток через ціну. Бу, якщо повторне кидання було обов'язковим, перекидайте той самий виняток замість створення нового винятку. Це принесе додаткові показники. Ви можете додати додаткову інформацію в кожному шарі до цього винятку.

  • Визначте власну ієрархію винятків, розширивши поточний клас виключень (наприклад, UserException, SystemException та їх підтипи) та використовуйте їх. Роблячи це, ви можете спеціалізувати свої винятки та визначити модуль / шар винятків для багаторазового використання. докладніше читайте за цим посиланням


2
Деякі хороші загальні моменти, хоча я не думаю, що ваш 5-й пункт ("Нульовий контроль з умовами ...") є дуже зрозумілим.
vaughandroid

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