Clean Code:エラー処理
9349 ワード
簡潔なエラー処理により、クリーンなコードが生成されます.
1.Try-CatchからFinally文へ
異常が発生するコードの場合はtry-catch-finally文から始めたほうがいいです.
try-catch構造を使用して範囲を定義し、残りの論理をTDDで追加します.
まず、異常なテストケースを強制的に作成し、テストによってコードを記述し、tryブロックのトランザクション範囲から自然に実施することで、トランザクションの本質を維持しやすくなります.
2.unchecked例外の使用
収益がchecked例外の使用より大きい場合にのみ使用します.
子ステップメソッドに例外を追加する場合は、すべての親ステップメソッドに例外を定義する必要があります.
これは開放−閉鎖の原則に反し,カプセル化を破った.
3.呼び出し元の例外クラスを定義する
エラーを定義する際に最も重要なポイントは、エラーを見つける方法です.
例外に対応する方法が例外タイプとは無関係である場合、パッケージクラスを使用して1つの例外タイプのみを返すことができます.
LocalPort port = new LocalPort(12)
try{
port.open();
} catch (PortDeviceFailure e) {
reportError(e)
logger.log(e.getMessage(), e);
} finally {
...
}
public class LocalPort {
private ACMEPort innerPort;
pblice LocalPort(int portNumber) {
innerPort = new ACMEPort(portNumber);
}
public void open() {
try {
innerPort.open()
} catch (DeviceResponseException e) {
throw new PortDeviceFailure(e);
} catch (ATM1212UnlockedException e) {
throw new PortDeviceFailure(e);
} catch (GMXError e) {
throw new PortDeviceFailure(e);
}
}
...
}
4.通常フローの定義
// Before
try {
MealExpenses expenses = ExpenseReportDAO.getMeals(employee.getID());
m_total += expenses.getTotal();
} catch (MealExpenseNotFound e) {
m_total += getMealPerDiem();
}
// After
MealExpenses expenses = ExpenseReportDAO.getMeals(employee.getID());
m_total += expenses.getTotal();
public class PerDiemExpenses implements MealExpenses {
public int getTotal() {
// 기본값으로 일일 식비를 반환
}
}
修復5.nullに戻らない
nullを返すコードは、問題を呼び出し元に転嫁します.
nullの確認が多すぎる場合は、例外を投げ出すか、特殊な事例オブジェクトに戻るように変換します.
外部APIがnullを返す場合、パッケージメソッドは、例外を放出するか、または特殊な事例オブジェクトを返すために実装される.
6.nullを渡さない
APIが通常の引数nullを使用することを望んでいない限り、メソッド引数を使用してnullを渡すことは避けられます.
ほとんどのプログラミング言語では、呼び出し者が誤って伝達したnullを処理するのに適切な方法がないため、ポリシー伝達nullを許可することは合理的ではない.
Reference
この問題について(Clean Code:エラー処理), 我々は、より多くの情報をここで見つけました https://velog.io/@jiffydev/Clean-Code-오류-처리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol