これ僕.com:行動分析学マニアがおくる行動戦略

意図と行動のギャップから生じる「不自由さ」への挑戦。果たして僕たちに自由はあるのか?

それはDRYじゃない

DRY原則
同じことを2度書かないというやつ。
プログラミングであれば、
同じ処理してる個所を
メソッドなりクラスなりに抽出し、
共通化するということになります。
プログラムのメンテナンス性を維持するためには、
とても大切な考え方です。


しかし、同じ処理であれば、
無条件に共通化していいものだろうか。
今日、次のような例に出会った。


画面に二つの項目、
例えば商品コードと注文番号がある。
この二つの項目の表示形式は同じである。
そこで、商品コードの表示形式を
整えてくれるサブルーチンを
注文番号にも適用することにした。
画面を動かしてみると、
二つとも正しく表示されている。
この使い方は正しいや否や。

今回の場合、次のようなことが懸念される。
ある日、商品コードの表示形式が変更になった。
例えば、今まで12-345としていたものを、
012-00345のように、
常に桁が固定になるよう
頭を0で埋めて欲しい、とか。
この変更に合わせて、
当然、サブルーチンも変更する。
すると困ったことに、
同じサブルーチンを使っている
注文番号の表示形式も変わってしまった。
この場合、最悪のケースを考えると、
注文番号の表示形式が変わってしまったことに
気づかないままリリースしてしまうかもしれない。


処理の手続きが同じだからと、
安易に共通化すると、
ある変更によって、
想定しないところに
影響を与えてしまうかもしれない。
共通化するときは、
その処理の手続きだけでなく、
それが「何をするものなのか」も意識しよう。
商品コードを表示するサブルーチンは、
「商品コードを表示している」のだ。
それが分かっていれば、
安易に注文番号の表示に使おうとはしないだろう。