内製フレームワークの基盤・業務共通クラスの開発に携わって実際に使用したデザインパターンの中からいくつかご紹介。(いまさらデザインパターン?)
Visitorパターン
製品製造のための原材料の必要量とコストを計算するクラスで使用。
原材料にはいわゆる部品、電気等の他に自社製品があり、階層が多段階で、それぞれ必要量、コストの計算方法が異なるため、それらをElementとして必要量を求めるVisitor、コストを求めるVisitorで構成。新たな種類の原材料が追加になったことが数回あり、Visitorパターンにしておいた甲斐がありました。
Strategyパターン
コードマスタには「RDBに持ちコード+発効日をKeyとして履歴管理」「RDBに持ち履歴管理しない」「XMLに持つ」等いくつかの種類があり、それぞれのアクセスをStrategyとして、アプリケーションからは種類を意識せず同一のメソッドでコードを取得可能とするクラスを作成。
後にリビジョンNoで履歴管理したい等、新たな要求がいくつかあり、Strategyにしておいた甲斐がありました。
Template Methodパターン
画面からのリクエストを元に帳票を作成し、リクエスト先に配信するというオンデマンドな帳票の作成処理は、リクエストを取り出す、リクエストを元にSQLを発行し対象レコードを取得する、帳票作成ツールに作製を依頼する、出来た帳票を配信する等ほぼ同一処理のため、Templateクラスを作成して提供。
アプリケーションは編集処理とデータ抽出用SQLのみ実装すればOKとしました。
他にも、赤黒管理を必要とするものには、入出金、売掛買掛等の金額、受注発注、在庫管理等の数量、と対象は様々だけれど、「新規:黒レコードを作成」「変更:直近黒レコードに対する赤レコードを作成+新たな黒レコードを作成」「取消:直近黒レコードに対する赤レコードを作成」と、流れは同じなので、Templateクラスを作成し、それを継承して各赤黒管理クラスを作成。
アプリケーションは赤黒レコードを意識せず、新規、変更、取消のメソッドを呼ぶだけでOKとしました。
■ コンピュータ・ユニオン ソフトウェアセクション機関紙 ACCSESS 2022年5月 No.415 より