17:ビジネスロジックをモジュールに分割する¶
モジュールを分割する際は「 ビジネスロジック 」を意識することが大切です。 ビジネスロジックとは具体的な業務に必要な処理のことです。たとえば商品、購入、在庫などを扱うプログラムのことを言います。
ビジネスロジックとモジュール分割がどう関係するのでしょうか?
具体的な失敗¶
以下の例では コントローラー (View関数)をまとめる views.py
モジュールに、View関数でない関数も記述してしまっています。
from some_payment_asp import purchase_item
def render_purchase_mail(item):
return render_to_string('payment/item_purchase.txt', {'item': item})
def purchase(user, item, amount):
purchase_item(user.card.asp_id, item.asp_id, amount=amount)
PurchaseHistory.objects.create(item=item, user=request.user)
body = render_purchase_mail(item)
send_mail(
'購入が完了しました',
body,
settings.PAYMENT_PURCHASE_MAIL',
[user.email],
fail_silently=False,
)
def item_purchase(request, item_id):
item = get_object_or_404(Item, id=item_id)
purchase(request.user, item, amount=1)
この場合 item_purchase
だけがView関数なのに、他の関数もView関数のように見えてしまいます。
より適切な別のモジュールに分割すべきです。
ベストプラクティス¶
ビジネスロジックを専用のモジュールに分割しましょう。
モジュール名はこの場合、 payment.py
とするのが良いでしょう。
from some_payment_asp import purchase_item
def render_purchase_mail(item):
return render_to_string('payment/item_purchase.txt', {'item': item})
def purchase(user, item, amount):
purchase_item(user.card.asp_id, item.asp_id, amount=amount)
PurchaseHistory.objects.create(item=item, user=request.user)
body = render_purchase_mail(item)
send_mail(
'購入が完了しました',
body,
settings.PAYMENT_PURCHASE_MAIL',
[user.email],
fail_silently=False,
)
(中略)詳細は書籍 自走プログラマー をご参照ください