データオブジェクトフィールドとJava Beanプロパティのいくつかの違い

データオブジェクトフィールドを宣言して使用する例を示します(java-project“ Data Model” -fishbolt.org/java/org.fishbolt.model/doc/article.ru.html )。 Java Beansとの比較が示され、利点が説明されています。



モデルでは、データオブジェクトフィールドはIDataField



インターフェイスで表されます。 このインターフェースのパラメーターは、フィールド値のタイプを決定します。

インターフェースには、フィールド値の設定と読み取りにそれぞれ使用されるsetValue



getValue



が含まれていsetValue



。 したがって、たとえば、 IDataField<Integer>



フィールドの値はsetValue(Integer)



メソッドを使用して設定され、 getValue()



呼び出し(戻り値の型Integer



)を使用して取得されます。

IDataField



フィールドIDataField



の有効期間は、フィールドが含まれるデータオブジェクトインスタンス( IDataObject



)の有効期間と同じです。 つまり、データオブジェクトフィールドの値はオブジェクトデータフィールドで繰り返し変更できますが、データオブジェクトのデータフィールドインスタンス( IDataField



)は変更されません。



データオブジェクト(つまり、 IDataObject



型のオブジェクト)では、フィールドは定数として宣言されます:



final static FieldDeclaration<String> name = new FieldDeclaration<String>();





データオブジェクトの名前がDepartment



ます。

Department.name



定数を指定することにより、データフィールドを参照できます。 データオブジェクト内のこの定数の宣言は、インスタンス内の対応するデータフィールド( IDataField



)の存在を決定します。 定数はフィールド値を取得するために使用されます-メソッドはデータオブジェクトの基本インターフェイス( IDataObject



インターフェイス)で宣言されます:



<T> IDataField<T> getDataField(FieldDeclaration<T> declaration) ;







次のように、 name



定数で表されるフィールドの値を取得できます。



Department d = ...;







IDataField<String> dataField = d.getDataField(Depatment.name);





String name = dataField.getValue();







または、ヘルパークラスModelUtil



短縮呼び出しを使用できます。



String name = ModelUtil.getValue(d, Depatment.name);







データオブジェクトのフィールドをJava Beanのプロパティと比較すると、 Java BeansテクノロジーはBeanインスタンスのプロパティを個別のオブジェクトに分離しません。つまり、Beanプロパティの値をラップしてBeanで「生きる」オブジェクトはありません 。 もちろん、そのようなオブジェクトは、プロパティ名前( Beanのインスタンス)のペアとして暗黙的に開発者の心の中に存在します 。 残念ながら、開発者の頭の中だけにそのようなオブジェクトが存在するため、コード内でオブジェクトを参照することはできません。



もちろん、開発者はカップルを表すクラスを簡単に作成できます

プロパティの名前は Beanのインスタンスですが、このようなクラスを使用すると、Beanのプロパティを削除したり、プロパティの名前を変更したりするコードで、アクションのコストが大幅に増加します。 コードでは、Beanプロパティを参照することはできません。その結果、このプロパティを削除または変更すると、コンパイル段階でリンクエラーが検出されます(実行段階でのみ可能) 。 この問題は、プロパティの名前を持つ文字列を使用することによってのみBeanプロパティを参照できるという事実によって引き起こされます(これはJavaの歴史的な配置です)。



一部の読者にとっては、フィールド値のオブジェクトラッパーの必要性を疑うときが来たと思います。 最も強力な議論の1つは、Java Beansと比較した場合のメモリ消費の増加です。 カウンターバランスは、情報の単位(フィールド値)の自己記述と表示の容易さであり、これにより、情報と対話するより再利用可能なコンポーネントを簡単に作成できます。



インスタンスを作成する前にデータオブジェクトのフィールドを参照する機能(つまり、説明付きの定数を参照する機能)を使用すると、コンパイルの段階でコード内のリンクの整合性を確認しながら、定数の宣言を使用して設定されるメカニズム全体を作成できます。



このようなメカニズムの好例は、Eclipse Data Modelユーザーインターフェイスプロジェクトfishbolt.org/eclipse/org.fishbolt.model.eclipse/doc/plugin.article.ru.htmlです。 このプロジェクトでは、データは宣言的な方法でユーザーインターフェイスコンポーネントに接続されます。



All Articles