Schi Heil と叫ぶために

hiroakiuno's blog

Strategy パターン と IfNecessary

今日覚えたことを今日使ってみた。

「もし必要なら」という場面はプログラミングをする上で頻繁に発生します。「もし必要なら〜する」という関数を作るときには DoSomethingIfNecessary() あるいは MaybeDoSomething() と命名するという慣習が広く見られます。

もし必要なら - 学校では教えてくれないバッドノウハウ英語 #3 - bkブログ

仕事で2種類のプロトコルを切り替えて通信するプログラムを書いていた。「初期化」→「通信」→「後始末」という流れの中で 「通信」にプロトコル A と B が存在しどちらも交換可能という仕様。A と B をアルゴリズムの違いと捉え Strategy パターンで設計を進めていた。しかし「初期化」の部分に A にだけ必要な差分処理があることに気づいた。

初期化は共通にしたかった。初期化の中で if(A) ならば…と書きたくない。Strategy の違いがカプセル化されてないじゃんとなってしまうからだ。かといって A の中に含めるのもしっくりこない。初期化だからだ。そんなとき今日読んだばかりの上記の if need be を思い出した。結局初期化を2つに分け片方を DoSomethingIfNecessary とすることでしっくりきた。

実は Strategy パターンを無理に当てはめるべきではない問題だったのかもしれない。Strategy パターンと IfNecessary。一見矛盾するがでもなぜかしっくりきた。