• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Viewクラスからロジック部分への繋ぎについて)

Viewクラスからロジック部分への繋ぎについて

このQ&Aのポイント
  • Javaデスクトップアプリケーションを新規作成する際に生成されるViewクラスとDocクラスの繋ぎ方を教えてください。
  • ViewクラスにはUI部分を実装し、ロジック部分は新たに作成するクラスであるDocクラスに実装します。
  • 通常はAppクラスでDocクラスのインスタンスを作成し、getApplication()メソッドと同じ方法でgetDocument()することにより、ViewとDocを繋ぎます。

質問者が選んだベストアンサー

  • ベストアンサー
noname#94983
noname#94983
回答No.2

>ビジネスロジック(MFCで言うDoc?)の部分についてはどうでしょう? MFCはあまり使ったことがないのでわからないが、要するにウインドウごとにモデル管理するドキュメント・クラスを用意し、それをウインドウ(=ビュー)やイベントトリガーであるリスナークラスとどう結びつけるか、ということだろうか。 どうも、こちらで回答している内容と、そちらで質問する内容が、ずれてる気がするな。お互いに頭で考えているイメージがずれているというか。 感覚的にウインドウを「ただ画面に表示されているだけの部品」ととらえ、画面に表示されるウインドウと背後で動いているビジネスロジック・オブジェクトがそれぞれ分離して存在しているような感覚で見ていないだろうか。うろ覚えだが、MFCとかは、画面に表示されるウインドウなどは、リソースデータとして用意し、それにロジック部分を結び付けていたように記憶している。だからこそ、トリガーとなるものがどう結び付けられるかを考えて設計しなければいけなかった。もし、同様の感覚で考えてるとしたら、その感覚そのものを捨てないといけない。 Javaのウインドウは、単に画面に表示されるパーツではなく、すべての機能を内包する「コンポーネント」だ。要するに、ウインドウの部品は、その中にデータも持っているしイベント処理も持っている。ウインドウのコンポーネントのオブジェクトをぽんと画面に出せば、イベント処理からデータ処理から、およそそのウインドウで必要となるすべての機能はコンポーネントの中にちゃんとそろっている、という感覚。それがオブジェクト指向の基本なわけだから。オブジェクトは、自身に必要なものをすべて自身で備えており、独立して存在でき機能しなければならない。 もちろん、それを単一のクラスとして実装することはない。ウインドウの中に、各種のイベント処理をするイベントリスナーのオブジェクトを組み込み、ドキュメント管理するオブジェクトを組み込む。そうやって多数のオブジェクトを自分自身の中に保持して機能する。いわば「幕の内弁当」のようになっている。が、自身の中に内包しているわけだから、お互いの関連付けも結びつきもへったくれもない。自分の中に保管している変数をただ呼び出すだけ、という感覚だ。 イベントリスナーにしろ、ドキュメントにしろ、Javaにはシステムのクラスライブラリにその基本インターフェイスと、具体的な実装クラスが用意されており、それを直接使ったり、単純継承するだけで使えるようになっている。だから、まずは実際にサンプルなどを見ながらいくつかコードを書いて動かしてみれば、オブジェクトの中にオブジェクトが組み込まれて機能する流れがわかってくると思う。百聞は一書にしかず。

jaboon
質問者

お礼

>画面に表示されるウインドウと背後で動いているビジネスロジック・オ >ブジェクトがそれぞれ分離して存在しているような感覚で見ていないだ >ろうか。 おっしゃる通りです。 >Javaのウインドウは、単に画面に表示されるパーツではなく、すべての >機能を内包する「コンポーネント」だ。 なるほど。とすると、viewクラスにビジネスロジック(仮にdocクラス)を実現するクラスを所有させてしまうわけですね。view->docへはインスタンスに直接アクセスし、doc->viewはobserverパターンのような(たとえば独自のイベント&リスナ)などで更新通知を行うという感じですかね。 >百聞は一書にしかず。 そうですね。ちょっと急ぎ過ぎたようです。 ありがとうございました。

その他の回答 (1)

noname#94983
noname#94983
回答No.1

>ViewとDocの繋ぎは、通常どのような方法を取りますか? Javaでは、通常、GUIで操作したときの処理はイベントリスナーが行う。したがって、イベントリスナークラス(アダプタークラス)としてロジックを定義し、それをGUIのイベント発生するコンポーネントにaddする。 このとき、どういう実装スタイルをとるかだが、無名クラスや内部クラスと呼ばれる形で定義するならば、ビュークラス内にあるコンポーネントは直接タッチできるからつなぎなど考える必要もない。独立したクラスとして定義するなら、コンストラクタでビューのインスタンスを渡して保持すればよい。 あるいは、イベントリスナーあるいはアダプターとは別に、ビジネスロジックだけのクラスを用意してつなぎたい、ということだろうか?

jaboon
質問者

補足

ご回答ありがとうございます。 人間が古いものでDoc-ViewのMFC的考え方でしたが、JavaではViewをMVCで言うVとCに分割するのですね?確かにそのほうがリスナーインタフェースを使うのに便利な気がしてきました。ありがとうございます。 ビジネスロジック(MFCで言うDoc?)の部分についてはどうでしょう? Appクラスでビジネスロジッククラスのインスタンスを作り、ViewとリスナークラスからはApp経由でビジネスロジッククラスのインスタンス参照を求める方法が素直な実装でしょうか?その場合、ビジネスロジッククラスからViewクラスへの更新通知はどのような方法を取るのでしょうか? たびたびになりますが、よろしくお願いします。

関連するQ&A