vol.006(SE編集部)るいもさんとの連載の2回目。ソース管理編の上(下は次号)です。CSVとString#Split新人のプログラムにこんなのがあった。dictionaryへ元のdataを突っ込めばいいだろ?と激しく質問。どっちが簡潔か?なるほど。(書いていて思ったが、Webアプリケーションのエスケープ問題と同根だな。CSVとString#Split(2)それからしばらくして見たらCSVが復活していた。......とするだけでも、全然ましだろ?確かに......別にクラスだからって、単なる名前つきのフィールドを持ったデータとして使ってもかまわないんだよ。......せっかくのクラスだからちょっとカプセル化を意識してみました。え、フィールドをアクセスしないようにしたんですけど。第一に、それに意味があるか良く考えてみな。このFooWithStatusといういい加減な名前のクラスはinternalだからこのプログラムのここでしか使わない。別に、プロパティメソッドにする必然は全然ない。privateにするってことは誰かから隠したいということだよな?ですね。誰かってのは、このプログラム自身ということになるね。いうことは隠してるのも隠されてるのもこのプログラムじゃん。それプラスマイナスゼロで、まったく意味無いじゃん。うう、しかし......それにカプセル化というのは、そういう意味じゃない。アクセス制御とは関係ない。......はあ?内部にFooDataを持つというのは、利用者にとってはどうでも良い実装詳細に見える。利用しているのはfooという文字列、barの変換後の文字列......なわけだろ。......さらに、こうだな。foo.createInsertCommand()...これで、呼び出し側はFooDataなんかについてそもそも意識する必要がなくなった。入力されたキーに一致するFooが存在して、しかもインサートすべき状態ならば、インサートするためのコマンドを作ってもらって、実行する。どのオブジェクトにどの役割を与えるかを決定して分離すること。これがカプセル化ということだ。