JavaFX-ドメインオブジェクトでプロパティを使用する正しい方法


10

JavaFXには、javafx.beans.property.DoubleProperty自動的に監視および同期できるフィールドを定義できるなど、新しいPropertyオブジェクトがたくさん用意されています。

多くのJFXの例では、MVCモデルクラスにこれらのプロパティフィールドがいくつかあり、これらを自動的にビューにバインドできます。

ただし、これは、JFXプロパティをドメインオブジェクトに配置することを奨励しているようです(Modelクラスがドメインオブジェクトになると想定している場合)。これは、懸念の分離が不十分である(つまり、GUIコードをドメインに配置する)と思われます。 )。

この問題が「現実の生活」で解決されているのを見た人はいますか?


私が間違っている場合は修正してください。しかし、JavaFXについての私の理解は、JavaFXはOracleの購入前に2008年にSunによって棚上げされ、AppleデバイスでのSilverlightとDecline of Flashの非推奨により市場に改装されたということでした。多分それはビューに密接に結合されていること、そしてそれが太陽の下で保留にされた元々の理由です。ちょっとした考え。
ジャックストーン

SunとOracleは、数年にわたってJavaFXに継続的に取り組んできました。最近の大きな変化は、JavaFXの使用に必要な「JavaFX Script」プログラミング言語を廃止し、通常のJavaの使用に切り替えることでした。この変化は、採用が不十分であり、まったく新しいプログラミング言語をサポートする費用が原因でした。
Stuart Marks、

回答:


4

私はJavaFX 2.0をいじってみましたが、あなたの質問についてだと思います。実際のプロダクションコードではなく、単なる個人プロジェクトですが、上記で述べたのと同じ問題に遭遇しました。モデル全体が2Dフレームワークに依存する傾向があり、私はそれが好きではありません。

モデル内のすべてのクラスを2つに分割したことです。データベースからコンテンツをロードする機能を備えた実際のモデルクラスは、状態などをどのように変更するかを知っています。そして、外観を決定する表現クラスです。画面上で。後者には、すべてのプロパティクラスが含まれます。

SwingなどのすべてのMVCフレームワークで同じデザインを見つけることができます。ここでそれを行うことからの脱出はありません。


優れた設計原則を適用することを強制するフレームワーク、または適用しない場合は失敗するフレームワーク。.NETの人として、これは私には非常によく知られています。
MattDavey

0

ほぼ7年後、この質問は以前と同様に有効です。

私の考えでは、javafxはモデルに属するクラスのいずれによってもインポートされるべきではありません。ただし、MVCアーキテクチャと組み合わせたMVVMを採用した場合は、非常にうまく機能する可能性があります。この意味で

  • エンティティ=(ドメイン)モデル(M
  • FXMLファイル=ビュー(V
  • コントローラはまだコントローラです(C
  • ビューモデル(VM)= javafxプロパティとそれが表す実際のドメインオブジェクト(M)への参照のみを含む新しいデータクラスのセット。ビジネスロジックメソッドの呼び出しをこのオブジェクトに渡し、コンポジット/デコレータとして機能させることができます。

MVVM + MVC

物事を確認するもう1つの方法は、コントローラークラスをビューの一部と見なすことです。これは、ビューモデルをビュー(データとアクション)にバインドすることだけを行うためです。したがって、簡単にプレゼンターまたはバインダーと呼ぶこともできます。ただし、これはコントローラーの使用方法によって異なります。Controllerクラスでビューモデルを操作するためのロジックを追加すると、その名前にふさわしく、上記のアーキテクチャーになります。コントローラークラスがモデルデータをUI要素にバインドし、ActionEventsをモデルメソッドにバインドするだけの場合、MVVMミュータントアーキテクチャを以下に示す傾向があります。

MVPVM

これらのアーキテクチャは、クリーンアーキテクチャ(プレゼンテーションレイヤー)に関するボブおじさんのアイデアにどうにか一致すると思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.