4

さまざまなOOP言語でDCI(データ、コンテキスト、相互作用)アーキテクチャを実装するための可能な設計は何ですか?私は、Java用のC ++、DI、およびAOPのポリシーベースの設計(Andrei Alexandrescu)について考えました。ただし、役割を表すためにStateデザインパターンを使用し、インタラクションに何らかのテンプレートメソッドを使用することも考えました...他の可能性は何ですか?

4

2 に答える 2

6

純粋なDCIを実行することは、ほとんどの言語で困難であり、通常、2つの問題のいずれかに遭遇します。Javaのような静的に型付けされた言語は、通常、自己統合失調症の問題を引き起こすある種のラッパーソリューションで 終わります。実行時に新しいインスタンスメソッドを自由にアタッチできる動的言語は、多くの場合、スコープの問題に悩まされます。RoleMethodsは、オブジェクトがその役割を果たしていない場合でも引き続き使用できます。

さまざまな言語について私が知っている最適なもの

  • マーヴィン:DCIの設計など、完全にサポートされています
  • マルーンを使用したRuby。あずき色の宝石(または同様のもの)を使用している場合は、RubyでDCIが完全にサポートされています。
  • Java:Qi4J
  • C#拡張メソッド(スコープの問題と過負荷の問題)は、おそらく動的と一緒になります。私はクレイに基づいた実装をしましたが、それはアイデンティティの問題を引き起こします
  • ネイティブRuby:メソッドインジェクションオブジェクトが役割を果たさなくなったときに使用できるメソッドに関するスコープの問題
  • C ++:テンプレート。スコープ発行メソッドの寿命は、オブジェクトの寿命と同じです

fullOOを見ると、いくつかの言語の例が見つかります。私自身のプロジェクトに、DCIをサポートするために特別に設計された言語であるMarvinを含めます。現在、MarvinのほとんどはC#と同一であるため、それ自体が言語であるというよりも、C#の拡張であると言えます。

于 2012-03-14T12:17:17.150 に答える
2

Javaでは、バイトコードを生成せずに、コンテキストにデコレータパターンを使用しますが、クラスの代わりにインターフェイスをデコレートします。これにより、柔軟性が向上します。インターフェイスを実装するクラスを介して表されるデータよりも。相互作用は、テンプレートメソッドへの手動の依存性注入を使用して行われます。

于 2010-04-28T23:01:38.003 に答える