今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

あり得ないデータを持つインスタンスの生成を禁止すべきではない

一般的には、あり得ないデータだからという理由でインスタンスの生成を禁止するのは好ましくない。たとえば、何らかの理由で「あり得ない」範囲に変化があったとする。その変化によって、従来は生成できなかったインスタンスを生成しなければならなくなったり、またはその逆で、生成できていたインスタンスが生成できなくなったりする可能性がある。
後者の、従来は生成できていたインスタンスが生成できなくなるケースは、システムに大きな影響を及ぼすことがある。単純な例で言うと、郵便番号の7桁化がある。郵便番号または住所クラスがあったとして、郵便番号の7桁化に伴って5桁の郵便番号を持つインスタンスを生成できなくしてしまうと、既存のデータを扱うことができなくなる。
あり得ないデータを持つインスタンスは、思考の上では存在し得るのだから、それを禁止するのは思考と実装のアンマッチが発生してしまう。このアンマッチが存在すると、何かのはずみでバグの原因になりかねない。
あり得ないデータを持つインスタンスを許容すると、どこで正当性をチェックすべきかと言う問題が出てくる。これは Validator クラスを用意するのが適切な解決策のひとつだと言える。
システムとシステム外部の接点となる部分では、あり得ないデータを持つインスタンスを生成できるようにしておき、Validator のチェックを通過したものだけがシステムロジック内に侵入できるようにすればよい。