レイヤードアーキテクチャでは、異なる層(プレゼンテーション層、ビジネスロジック層、データアクセス層など)間でエラーハンドリングを適切に行うことが重要です。エラーが発生した場合に効果的に対処し、アプリケーションの信頼性とユーザビリティを向上させるための方法を学びましょう。
エラーハンドリングは、プログラムが予期しない状況に直面したときに、どのように適切に対応するかを定義します。Pythonでは、try
, except
, finally
を使用してエラーハンドリングを行います。
以下のコードは、基本的なエラーハンドリングの例です。
def divide(a, b):
try:
result = a / b
except ZeroDivisionError:
print("Error: Division by zero.")
return None
return result
print(divide(10, 2)) # 正常
print(divide(10, 0)) # エラー処理
try
ブロック内で、ゼロで割り算を行うとZeroDivisionError
が発生する可能性があります。except
ブロックは、エラーが発生した場合に実行されます。ここではエラーメッセージを表示し、None
を返します。それぞれの層でエラーハンドリングを行う場合、エラーが発生した層で適切に処理し、上位層にエラーメッセージやエラーコードを伝えることが重要です。以下に、レイヤードアーキテクチャの例を示します。
プレゼンテーション層では、ユーザーからの入力を受け取り、ビジネスロジック層に渡します。エラーが発生した場合、ユーザーに適切なメッセージを表示します。
def user_input():
try:
a = int(input("Enter numerator: "))
b = int(input("Enter denominator: "))
result = divide(a, b)
if result is not None:
print(f"Result: {result}")
else:
print("Calculation failed.")
except ValueError:
print("Error: Invalid input. Please enter integers.")
user_input()
ValueError
が発生した場合、無効な入力を表示します。divide
関数を呼び出し、計算結果を表示します。ビジネスロジック層では、アプリケーションの主要なロジックを実装します。ここでもエラーが発生した場合は、適切に処理し、上位層にエラーメッセージを返します。
class BusinessLogic:
@staticmethod
def calculate(a, b):
try:
return divide(a, b)
except Exception as e:
print(f"Business logic error: {e}")
return None
calculate
メソッドでdivide
関数を呼び出し、エラーが発生した場合は、エラーメッセージを表示します。データアクセス層では、データベース操作や外部APIとの通信を行います。ここでのエラー処理も重要です。
class DataAccess:
@staticmethod
def fetch_data():
try:
# データベースからデータを取得する処理
# ここでは仮の例として、常にエラーが発生するとします
raise ConnectionError("Database connection failed.")
except ConnectionError as e:
print(f"Data access error: {e}")
return None
fetch_data
メソッド内で、データベース接続エラーが発生する場合を想定しています。エラーが発生した場合は、エラーメッセージを表示します。レイヤードアーキテクチャにおけるエラーハンドリングは、各層で適切に行うことが重要です。ユーザーに理解しやすいエラーメッセージを提供し、エラーを適切に処理することで、アプリケーションの信頼性を向上させることができます。