ここで重要な概念が欠落しているかもしれません。私は 'ダム'データオブジェクトを理解しています。また、ロールは、ダムオブジェクトがその役割を果たすときに適用されるメソッドのステートレスなコレクションであることも理解しています。また、実装されているアルゴリズムで実行されるアクターをコンテキストがアセンブルすることも理解しています。しかし、役割がお互いについて知っていること、文脈の中で定義されなければならない天気、またはそれ以外は私には分かりません。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
- コンテキストは、ユースケースに参加するために、最初のオブジェクトでRoleメソッドを呼び出します。
- その時点から、ロールはユースケースを実行するために他のメソッドを呼び出します。 DCIでは
ありがとう、私はartimaの記事を読んでいます。昨日、これについて考えながら、私は細部にこだわって、その点を見逃していたという認識を持っていました。正確な詳細は重要ではありませんが、重要なことは、あなたがしようとしたときにすべての部分を持つように(必ずしも1つの関数ではありませんが)「フィーチャ」(すべての相互作用のセット)を1か所それを理解する。この場所はコンテキストであり、ロールはそのフィーチャ/コンテキストのコンポーネント(対話)を表す1つの方法です。 – Exodist