北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

デメテルの法則

Law of Demeterはクラス間の不要な依存を取り払うために良いと言う話を聞いていたんだけど、実際にこの手法に従ってやってみると、遠くのクラスにメッセージを送るためのラッパーメソッドが至る所に量産されてしまう。そのため、新しいメソッドを追加したい場合、逆にラッパー作成の分だけ修正コストが大きくなってしまうような気がしてならない。これって、修正コストを下げられる手法じゃないの?



・・・と思って、注意深く調べてみると、


On the other hand, at the class level, the LoD leads to wide interfaces because the LoD requires that we introduce many auxiliary methods instead of digging directly into the object structures. Wide interfaces for classes are a problem .....





だそうで。クラスにラッパーができまくってインタフェースが肥大するのは問題点だって、明記されてるのね。結局はアスペクト指向にするといいって締めくくられてる(笑)。



実際問題は、ラッパー作る手間と依存が減ることによる影響範囲の少なさのトレードオフなんだろうね。例えば、多数のクラスがある一つのクラスを経由してその先のクラスのメソッドを叩いているような構成で、先端のクラスのメソッドの呼び出し方法が変わるような場合だと、かなり有効なんだろうなあ。