状態によって公開メソッドが変わるようなオブジェクトは、Javaでは定義できない

データベースと連携する前提であるオブジェクトの場合はActiveRecordとして、storeなり何なりのメソッドを用意、公開すればいい。

問題はデータベースと連携するかも知れないししないかも知れないオブジェクトの場合、例えばモデル内ではデータベースとの連携をしたいが、ビューでは連携したくない場合にどうするか。

Javaではデータ転送オブジェクト(DTO)でデータのみを取り出して送ったり、ビューではstoreメソッドを読んでも無反応または例外を投げさせたり、「ビューではstoreを呼ばないでくださいね。ややこしいことになるから」と口頭でハックするか、どれかになる。いや大抵はDTOを使うだろうけどw、データの定義を分散させたくないから、モデル内でもDTOに対する操作を定義する、つまりデータと手続きを分離させることになる。下手にデザインパターンを当てるよりはずっとマシ。

データと手続きでオブジェクト化しない理由の一つは、Javaの言語仕様にあるんじゃないかと疑っている。

プロトタイプベース言語であるjavascriptioLanguage、SELFなら可能だけど。Rubyならどうなのか。Pythonなら、Smalltalkならどうか。

どうなんでしょう?(と聞くと、自分で調べろ!と怒られそうだけどw)