2011-08-04 11 views
1

ここで重要な概念が欠落しているかもしれません。私は 'ダム'データオブジェクトを理解しています。また、ロールは、ダムオブジェクトがその役割を果たすときに適用されるメソッドのステートレスなコレクションであることも理解しています。また、実装されているアルゴリズムで実行されるアクターをコンテキストがアセンブルすることも理解しています。しかし、役割がお互いについて知っていること、文脈の中で定義されなければならない天気、またはそれ以外は私には分かりません。DCI、「コンテキスト」の概念に悩まされていること、お互いの知識の中でどのような役割を果たしているのか

コンテキストには、開始と終了の2つの役割があるとします。私たちのユースケースは文字列連結であるため、各役割に文字列を割り当てます。

一部psudocode:(?):

役割があるCONCAT()(メソッド)とstart.concat(コール)をする必要があるかもしれない方法の異なる3つの組み合わせについて、今

context concat { 
    role start { 
     method concat() {...} 
     method get_value {self->as_string} 
    } 
    role end { 
     method get_value {self->as_string} 
    } 

    // According to the docs I have read, the context simply kicks off a method in 
    // a role, the role handles the rest. 
    start.concat(?)  
} 

同じコンテキスト内の他の役割を認識して(私には間違っていると思われる他の文脈、非再利用できるように役割を強制する。)

concat{ self.get_value + end.get_value } 
start.concat() // Not passing 'end' as an argument, 
       // it is already aware of end because 
       // it is defined in the same context 

役割は、コンテキスト内の他の役割を認識していませんので、それらを必要とします1つのメソッド呼び出しに引数として30個の役割を渡す必要のあるメソッドを起動することでコンテキストが開始された場合は、コンテキストが任意の数の役割を持つことができるため、痛みを感じます。道) (注!この1でロール定義は、コンテキストの外に移動することができる、と複数のコンテキストで再利用は)私に

concat(end x) { self.get_value + x.get_value) 
start.concat(x) 

最も明白な選択がキックするコンテキストを強制しないことのようです方法とそれ以上のものはありません。次に、対話ロジックをコンテキストに入れ、非対話パートを役割に入れます。 (注:この1でロール定義は、コンテキストの外に移動することができる、とコンテキストの再利用INAのカップル)

concat() UNDEFINED 
start.get_value + x.get_value 

これは、このかかわらず、矛盾しているようだ: http://en.wikipedia.org/wiki/Data,_Context_and_Interaction#Execution_Model

  1. コンテキストは、ユースケースに参加するために、最初のオブジェクトでRoleメソッドを呼び出します。
  2. その時点から、ロールはユースケースを実行するために他のメソッドを呼び出します。 DCIでは

答えて

4

役割は通常、コンテキストを認識し、コンテキストは、すべてのrelavantの役割のためのリポジトリとして機能することができます。私。ロールがコンテキストにアクセスできるケース番号2、および必要な他のロールを再生するオブジェクトを要求します。 これは実装の詳細です。必要なオブジェクトをロールメソッドに渡すこともできます。重要な点は、ロールがロールメソッド(ロールプレイヤーメソッドを介さずに、不幸なカップリングを作成するため)を介して相互にやり取りすることです。 ロールは、一般的に言えば、コンテキスト間での再利用の候補とは思われません。コンテキストは大まかにユースケースに対応し、ロールはユースケースの動作を実装します。一般に、ロジックはユースケース全体で再利用できません。

これが役に立ちます。

また、DCIとオブジェクト構成のGoogleグループを紹介するartimaの記事もご覧ください。

+0

ありがとう、私はartimaの記事を読んでいます。昨日、これについて考えながら、私は細部にこだわって、その点を見逃していたという認識を持っていました。正確な詳細は重要ではありませんが、重要なことは、あなたがしようとしたときにすべての部分を持つように(必ずしも1つの関数ではありませんが)「フィーチャ」(すべての相互作用のセット)を1か所それを理解する。この場所はコンテキストであり、ロールはそのフィーチャ/コンテキストのコンポーネント(対話)を表す1つの方法です。 – Exodist

関連する問題