いまどきの分析設計パターン10選
基礎編 この辺はいつもの論
値の種類
事業活動を観測して「値の種類」を特定しましょう。
そして「独自の型」として定義してビジネスルールを正確に記述しましょう。 単位と、範囲と、関係に着目する。
- 値の単位は、値の種類を分類する最も重要な手がかり。単位が変われば型も変わる
- 値の範囲はビジネスルールで決まる。範囲が変わるなら型も変わる。計算結果にも範囲がある。
- 値の関係はメソッドにより表現される。引数と戻り値を独自型で守る。
範囲
範囲を判定する際に比較演算子を使わず「範囲型」を定義してビジネスルールをカプセル化する。 金額範囲、日付範囲型などがある。
階段型
範囲型の拡張。電気料金の2段階制などが好例。
うれしいこと:
- If文で条件を書かなくて済む
- ビジネスルールの変更がenumの定義変更で済む(ロジックを変更する必要がない)
中級編 分析パターンというより設計パターン?
状態遷移
ある状態からある状態への遷移可否判定を設計で担保する。
enumで状態とアクションを定義して、mapに展開して遷移可否を導出できるようにする。
入出金履歴と残高 ステートソーシングとイベントソーシング
p.34のイベントソーシングの例にある残高は「残高() メソッド」。導出するということ。
list型によるSnapshotからのリプレイ機能の実装例。
未来在庫 イベントソーシング②
実績(過去)と予定(未来)を別のコレクションで管理する。
また、入庫予定の確度と出庫予定の優先度を考慮すべき。(実績は事実なので考慮不要)
上級編 もはや実装例
スキルマッチング Set演算
streamのcontainsで比較演算
比例配分 割合と端数処理
割合による金額の分配を厳密に行うにあたり、割合と金額を同じロジックで処理する。
(計算を抽象化して対象を注入する)
https://scrapbox.io/files/66d41afc5aa422001c254af6.png
複合条件 デシジョンテーブル
制御文や演算子に代わって型を使う。
貨物の特性に応じたコンテナを割り当て、相応の運賃を設定する。
複数の決定因子(貨物・コンテナ)から適用(運賃)を導出する。
決定因子が単一ならenumとmapで対応していたが、複数因子では論理演算が必要。
「うれしいこと」はenum+map例と同じ。認知負荷低減と変更容易性向上。
経路探索 ネットワーク構造の表現と計算
隣接ペアと隣接リスト。
ユースケースがあまり思い浮かばないが、SCMネットワークなどで使うんだろうか。