18

EMFに関するいくつかの チュートリアルを読みましたが、なぜEMFを使用する必要があるのか​​疑問に思っています。

今までは、POJO を XSD スキーマ + JXCから、または手動で生成していました。

私が EMF を理解している限り、クラス間の複雑な関係 (1 対多など) を定義すると便利です。しかし、それだけですか?EMF でコードを生成するのはもっと複雑ではありませんか? いくつかの余分な依存関係を追加しませんか?

4

4 に答える 4

18

一般的に言えば、emf を使用すると、実行時にいくつかの利点が得られると言えます。

最初の段階で、ecore クラス (および emf ランタイム) がアプリケーションの POJO から必要なものを提供することに気付くでしょう。プレーンな POJO を使用する場合は手作業で多くのコーディングが必要になるのに対し、多くの領域でそれ以上のコーディングは必要ありません。

  • 完全な通知システムが得られます (PropertyChange コーディングはもうありません)。インスタンスツリーのさらに下で発生した変更の通知も提供します(リスナーをxに接続し、xによって参照されるyの変更の通知を受け取ります)。
  • 値は設定できません (実際には非常に一般的なニーズ: 値の 3 つの状態 (設定されている、null に設定されている、または変更されていない) について知る必要があります)。
  • 双方向参照: X は Y を参照し、その逆も同様です。X の Y への参照を削除すると、反対の参照も削除されます。
  • XML、XMI (など) のシリアライゼーションはすぐに使用できます。
  • 遅延読み込み: モデルを分割し、特定の部分を遅延読み込みのみにすることができます。

EMF の拡張機能は、さらに多くの機能を提供します。

  • EMF クエリまたは EMF パスは、高度なクエリ機能を追加して、特定の条件で pojo インスタンスを収集します
  • CDO を使用すると、さらに手作業でコーディングすることなく、3 層アプリケーションをコーディングできます。CDO は、データベースの永続性とリモート通知 (セッション、トランザクション、バージョン管理、分岐など) を追加します。
  • Xtext はカスタム DSL にシリアライゼーションを追加します (独自のシリアライゼーション形式/方言を定義します)

実際、EMF/Ecore は POJO の標準を提供し、従来のアプローチで手動でコーディングするものを実際に提供するエコシステム全体がその周りに成長したと主張することができます。

正直なところ、EMF の欠点は、Ecore ランタイムに縛られることです。これは、Eclipse ベースのリッチ クライアントをコーディングする場合は問題ありませんが、サーバー上にいる場合は問題になる可能性があります。

于 2011-05-09T07:59:10.003 に答える
14

あなたの唯一の関心が POJO の生成である場合、EMF でできることと同じことを達成するための多くの代替手段があることに同意します。

ただし、Java 生成は EMF の最初のアプリケーションにすぎません。現在、EMF モデルを操作 (クエリ、検証、変換など) するための多くの機能を無料で提供する、膨大な数の EMF ベースの Eclipse プラグインがあります。

EMF に関する公式の Eclipse プロジェクトのリストについては、 Eclipse Modeling Projectを参照してください。

また、Acceleoを見て、EMF モデル (Java、PHP など) からのテンプレートベースの生成アプローチの柔軟性を確認してください。

于 2011-04-02T19:24:41.037 に答える
3

Jordi が言ったことに加えて、EMF は、たとえば XML Beans とは異なり、モデルの変更にリスナーを追加できる通知メカニズムを提供します。したがって、モデルで変更が発生すると、この変更について通知されます。

EMF クエリを使用して、SQL に似た構文と OCL を使用してモデルを検索することに成功しました。EMF Validation は、スキーマで定義されているものに基づいてモデルを検証し、スキーマで表現できない場合に独自の検証ロジックを導入するための優れたフレームワークです。

于 2011-05-02T20:15:09.533 に答える