アクセシビリティに関するデザインパターン

以前からprivateよりきつい可視性がほしいなぁと思ってたけど,その原因,なんでそんなものが欲しいかというのとその対策とがやっと分かった,というか分かってたけど明確に意識できた。

仕事でソフトウェアを作っていると,当然複数人で開発することになって,かつ最初に開発した人とメンテナンスする人が違うというのが当たり前になるわけで。

クラスのメンバ変数がprivateになっていないというのは保守性の面からみて論外としても,privateになっていてすら,そのクラスをメンテする人の腕(or性格?)によってはめちゃくちゃな使い方をされることが多いのね。

例えばよくあるものとして,計算コストがかかるデータをキャッシュする変数を追加したような場合。

キャッシュなので更新のタイミングというのは非常に重要なんだけど,メンテのつど,間違えずにプログラム修正していくのは難しいわけで。緊急の修正とかの場合になると,ある前提のもとでのみちゃんと動作する,みたいな修正をしてしまうことも,まあ実際のところ少なくない。

難しいコードに「~は~なので~のときは~すること」みたいなコメントをつけると,何年かするうちにそのコメントどおりにしていないコードも紛れ込み,コメントがウソになってしまって結局何なのかよく分からなくなるということも多い。

なので,更新が難しい変数は,できるだけ簡単に触らせないというか,特定のメソッドからのみいじれるようにしないといかんなぁと思ってて,だからprivateよりきつい制限,それこそ特定のメソッドからしかアクセスできない(.NETでの属性みたいなもの)が欲しいなあということだったんだけど。

よくよく考えたら,そういう変数は新たにクラスを作ってそこにメソッドをまとめてしまえばよかった。

保守でむちゃくちゃにならないために機能を分けてアクセス制御するパターン。