QA@IT
«回答へ戻る

回答を投稿

ここでは例として Dictionary クラスを挙げましたが、似たようなことを感じるクラスはほかにもいろいろあります。話を一般化すると、とくに追加・上書きという機能に限らず、1つのメソッドはできるだけ単純な機能に絞り、複合させた機能は持たせないようにしたほうが良いという考えが、背景にあります。

むしろ、既に登録されているかテストしてからになるので、
上書き不可なメソッドの方が復号させた機能ではありませんか?

もちろん、そういう要件(上書き不可)があって、それに応じた拡張がされるのは必然だと思います。
その場合でもUpdateメソッドの方に、上書きする対象が無ければ例外を生成するか、DB操作のように、Updateメソッドの戻り値が更新したキーの数になるようにした方がピンと来ますが。

ここから蛇足
そもそもdic[7*7]="xyz"とすべきとこをdic[6*6]="xyz"としたら救われないじゃないですか。
そういうのは、単体試験で確認すべき事ではないでしょうか?
仮に、上書き不可な実装だったとして、
dic[47] = "xyz";
で例外が発生するのはdicの試験であって、
dicを使う側の試験ではありませんよ。

> ここでは例として Dictionary クラスを挙げましたが、似たようなことを感じるクラスはほかにもいろいろあります。話を一般化すると、とくに追加・上書きという機能に限らず、1つのメソッドはできるだけ単純な機能に絞り、複合させた機能は持たせないようにしたほうが良いという考えが、背景にあります。

むしろ、既に登録されているかテストしてからになるので、
上書き不可なメソッドの方が復号させた機能ではありませんか?

もちろん、そういう要件(上書き不可)があって、それに応じた拡張がされるのは必然だと思います。
その場合でもUpdateメソッドの方に、上書きする対象が無ければ例外を生成するか、DB操作のように、Updateメソッドの戻り値が更新したキーの数になるようにした方がピンと来ますが。

ここから蛇足
そもそもdic[7*7]="xyz"とすべきとこをdic[6*6]="xyz"としたら救われないじゃないですか。
そういうのは、単体試験で確認すべき事ではないでしょうか?
仮に、上書き不可な実装だったとして、
dic[47] = "xyz";
で例外が発生するのはdicの試験であって、
dicを使う側の試験ではありませんよ。