過剰設計にならないための判断基準
過剰設計にならないための判断基準
Section titled “過剰設計にならないための判断基準”過剰設計を避け、適切な設計を行うための判断基準を詳しく解説します。
判断基準1: transaction.on_commit vs Celery
Section titled “判断基準1: transaction.on_commit vs Celery”transaction.on_commitで十分なケース
Section titled “transaction.on_commitで十分なケース”条件:
- 処理時間が短い(1秒以内)
- エラーが発生する可能性が低い
- 再実行が不要
実装:
# ✅ transaction.on_commitで十分from django.db import transaction
@transaction.atomicdef create_order(order_data): order = Order.objects.create(**order_data)
transaction.on_commit(lambda: send_notification_email(order.id))
return order判断基準:
- transaction.on_commitで十分: 処理時間が短い、エラーが発生する可能性が低い
Celeryが必要なケース
Section titled “Celeryが必要なケース”条件:
- 処理時間が長い(5秒以上)
- エラーが発生する可能性が高い
- 再実行が必要
実装:
# ✅ Celeryが必要from django.db import transactionfrom celery import Celery
celery_app = Celery('tasks', broker='redis://localhost:6379')
@transaction.atomicdef create_order(order_data): order = Order.objects.create(**order_data)
transaction.on_commit(lambda: process_payment.delay(order.id, order_data['amount']))
return order
@celery_app.taskdef process_payment(order_id, amount): payment_service.charge_payment(order_id, amount)判断基準:
- Celeryが必要: 処理時間が長い、エラーが発生する可能性が高い、再実行が必要
過剰設計にならないための判断基準のポイント:
- transaction.on_commit vs Celery: 処理時間とエラーの可能性に応じて判断
適切な判断基準により、過剰設計を避け、効率的なシステムを構築できます。