「複雑な業務ロジック」が読みづらいのは「記述が分散」しているから #設計ノウハウ – Qiita

背景

基幹システム移行でいわゆる「複雑な業務ロジック」を移行する場面です。
最近「ドメイン駆動設計をはじめよう」を読んだため、その手法を意識して移行を行います。

言葉のイメージ

「複雑な業務ロジック」という言葉がありますが
これは「業務ロジックが複雑」なイメージを持っていました
しかし今回移行したシステムで、実際に複雑なのはその「前処理」でした。

「入力に対する結果が予測しづらい」システム

今回の移行対象は、業務ロジックとしては教科書通りのシンプルなものでした。
しかし全体として見通しが悪く運用で苦労していました。
いわゆる「入力に対する結果が予測しづらい」システムです

また、レガシーシステムとの連携があり、そこでも「値の加工」「区分値の変換」が記述されていました。
つまり複数の層に処理が分散している状態です。

これが見通しの悪さにつながっていました。

どのように対処したか

一連の処理を整理して再構成するのは苦労しましたが1
最終的に、前述の「教科書的な部分」と「前処理」の構成に落ち着きました。

教科書的な部分」=業務ロジックまたはドメインロジック
前処理」=モデル変換装置または腐敗防止層2

ですね。

(※最近「ドメイン駆動設計をはじめよう」を読んだため、そちらの言葉をつかっています)

読みづらさの源泉

整理するのは苦労しましたが、そのコストに見合う成果はありました。

業務ロジックで使う「」に関連する処理は「モデル変換装置だけ見ればよい」状況ができたのです。
以前は「」に関連する処理を読み解くため、システム全体を渡り歩いて把握する必要がありました。
しかし今後は、モデル変換装置まで読めばよいのです。

このように以前のシステムが「読みづらい」のは「関連処理の記述が分散していた」ことに根本的な原因がありました。

心理的抵抗

しかし、その変更の過程は簡単でなかった点を補足します。

記述の分散を避けるため「モデル変換装置」以外ではデータを加工しないよう徹底する必要があります。

しかし、この作業は「心理的抵抗」が大きく苦労しました。

DBやSQLの扱いに慣れているので「データの近くで空白除去や文字列の加工すると効率が良い」という感覚です。

慣れたやり方への誘惑が強いですね。

コード量の観点から

出来上がったシステムは、全体のコード量も驚くほど削減されました。

しかし「業務ロジック」のコード量よりも「モデル変換装置」コード量の方が多いという結果だったのは特徴的でした。

このコード量の差が「データを整える部分に複雑がある」と語っているように感じました。

話には聞くパターンですが、実際に目にすると違和感がすごいです。
一番重要な「業務ロジック」のほうが簡潔に記述されているのですから。

例えるなら「料理を作るのは時間がかかかるのに、食べるのは一瞬」といった感覚でしょうか。

追記:「チャーハン作りで、プライパンで仕上げるのは一瞬で、仕込みのほうが時間がかかる様子」の例のほうが適切かも




Source link

関連記事

コメント

この記事へのコメントはありません。