Featured image of post if文で書いたPerlの決済審査を、審査ごとのMooクラスに分けてChain of Responsibilityにたどり着く全3回【目次】

if文で書いたPerlの決済審査を、審査ごとのMooクラスに分けてChain of Responsibilityにたどり着く全3回【目次】

if文で書いた決済審査が、条件を足すたびにネストして保守できなくなり、審査ごとのMooクラスを鎖でつなぐChain of Responsibilityにたどり着くまでの全3回の目次です。第1回から順に読む連載で、どの回で何が変わるかを一覧できます。

@nqounetです。

架空のECサイト「ペルマート」(Perl + Mart の造語)の決済審査を、Perl で書いて組み直していく全3回の連載です。金額上限と有効期限を if 文で確かめるところから始め、審査条件を5つに増やしてコードが手に負えなくなる様子を体験し、審査ごとのクラスを鎖でつなぐ Chain of Responsibility パターンで直します。

各回は前の回のコードを引き継ぐので、第1回から順に読むのが早道です。このページは目次を兼ねた案内板です。入口は「どこから読むか」で、困りごとが決まっているなら「困りごとから探す」で選んでください。

どこから読むか

  • 第1回 — Perl で決済審査を if 文から書くなら。金額上限と有効期限の2条件を、早期リターンで書く
  • 第2回 — 審査条件が増えて if 文がネストしてきたなら。第1回の2条件に3つ足して、何が困るかを確かめる
  • 第3回 — 審査をクラスに分ける形から見たいなら。前提は第2回の、5条件が1つの関数に入った check_payment

困りごとから探す

  • 第2回 — 審査条件を足すたびに if 文のネストが深くなる。早期リターンで平らにしても、1つの関数に責任が集まったまま
  • 第2回 — 不正利用検知だけを試したいのに、前の4つの審査を通るテストデータを毎回用意している
  • 第3回 — 新しい審査を足すときに、既存の審査コードを書き換えたくない
  • 第3回 — 審査の順序を入れ替えたい

対象読者

  • Perl入学式卒業程度の方
  • 「Mooで覚えるオブジェクト指向プログラミング」シリーズを読了した方
  • if文の複雑化に悩んだことがある方
  • デザインパターンを実践的に学びたい方

前提知識

このシリーズは「Mooで覚えるオブジェクト指向プログラミング」シリーズの応用編です。まだ読んでいない方は、先にこちらをご覧ください。

技術スタック

  • Perl v5.36以降(signaturesを使用)
  • Moo(軽量オブジェクト指向フレームワーク)
  • 外部依存なし(Moo以外)

記事一覧

第1回: カード決済の審査を、金額上限10万円と有効期限の2条件でif文から書く

  • 決済審査の基本と条件分岐
  • 金額上限チェック(10万円以上は拒否)の実装
  • カード有効期限チェックの追加
  • 早期リターンでコードを読みやすく

第2回: 審査条件を5つに増やしたら、if文のネストが5段になった

  • if文ネストの問題点を体験
  • ブラックリスト、残高確認、不正利用検知の追加
  • 審査ルール5つ以上でコードが保守困難に
  • テスト困難・新ルール追加困難の具体例

第3回: 審査条件を1つ足すたびに既存コードを触りたくない。審査をクラスに分けて鎖でつなぐ

  • Chain of Responsibilityパターンの基本
  • 各審査ロジックを独立したクラスに分割
  • PaymentChecker基底クラスとチェーン構築
  • ExpiryChecker, LimitChecker, BlacklistCheckerの実装
  • 拡張性の高い決済審査システムの完成

学べること

回学べること
第1回決済審査の基本、早期リターン、ハッシュリファレンス
第2回コードスメルの認識、リファクタリングの必要性
第3回Chain of Responsibilityパターン、責任の分離、拡張性

注意事項

このシリーズで扱う決済システムは学習用の架空システムです。

実際の決済システムを開発する際は、以下の点に注意してください。

  • PCI DSS などのセキュリティ基準を遵守する
  • カード番号は本番環境では暗号化して保存する
  • 審査ロジックは決済代行会社のAPIを利用する

関連シリーズ

同じChain of Responsibilityパターンを別のドメインで学べるシリーズです。

CLIアプリケーションでCommandパターンを学ぶシリーズもあります。

comments powered by Disqus
システム開発・AIワークフローのご相談は Meetsource へ
Hugo で構築されています。
テーマ Stack は Jimmy によって設計されています。