問題タブ [dci]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
design-patterns - DCI - データ、コンテキスト、相互作用 - MVC の後継?
データ、コンテキスト、インタラクション (DCI)を組織に売り込むのに最適な説明は何ですか?
MVC-patternの作成者であるTrygve Reenskaugによって作成されました。
本当にMVCの後継なのか、それとも別のパターンなのか? そして、その長所と短所は何ですか?
oop - DCIアーキテクチャの可能な設計は何ですか?
さまざまなOOP言語でDCI(データ、コンテキスト、相互作用)アーキテクチャを実装するための可能な設計は何ですか?私は、Java用のC ++、DI、およびAOPのポリシーベースの設計(Andrei Alexandrescu)について考えました。ただし、役割を表すためにStateデザインパターンを使用し、インタラクションに何らかのテンプレートメソッドを使用することも考えました...他の可能性は何ですか?
persistence - DCI (データ、コンテキスト、相互作用) 永続化の例
私が見た DCI の例はすべて、情報の最終的な所有者としてのオブジェクトに基づいているようで、トランザクション境界はメソッド内で定義されています。
ある種の永続層がある永続アプリケーションの例を見たいと思います。つまり、基礎となる永続ストレージの複製オブジェクトコピーが存在する可能性があり、オブジェクトへの変更がコピーへの変更であり、後で変更される固執する。DCI はそのモデルでまったく機能しますか?
architecture - DCIアーキテクチャの例?
私は無駄のないソフトウェアアーキテクチャを読んでDCIアーキテクチャを理解しようとしてきました。私の理解を具体化するために、もう少し例を見る必要があるように感じますが、本で解決された口座間送金のバリエーションであるものしか見つけることができませんでした。
ウェブ上に何かあれば、私に知らせてください。または、ウェブ上にない良い例を自分で作成した場合は、ここに投稿できます。
どんな言語でもかまいません。
reflection - F#での一般的なダックタイピング?
let inline と member 制約を使用すると、既知のメンバーに対してダック タイピングを行うことができますが、次のようなジェネリック関数を定義したい場合はどうでしょうか。
let ダックラッパー<'a> アヒル = ...
署名 'b -> 'a を使用し、戻り値は 'a (インターフェース) を実装し、duck への呼び出しを転送するオブジェクトになります。
Reflection.Emit を使用して C# でこれを実行しましたが、F# のリフレクション、引用符、またはその他の構成要素を使用すると簡単になるかどうか疑問に思っています。
これを達成する方法について何か提案はありますか?
Timsの回答を読んだ後に編集 して、もう少し詳細を説明したいと思いました
引用を使って助けることについて書いたとき、私が考えていたのは次のようなものでした:
!! 引用符を関数に変換する演算子であり、 %expr はメソッドの作業単位です。式を関数に変換することはできますが(推測します)、方法がわかりません
IInterface は 'a になるので、もちろん、これでうまくいくわけではありません。F# リフレクションが便利な関数を持ち、型オブジェクトといくつかの関数値に基づいて型を構築できることを願っています。
EDIT Tomas Petricekの回答の更新として、私のニーズを説明するコードをいくつか提供します
これは、 DCIの教科書の例をF# に移植する試みです。ソースと宛先は DCI ロールです。特定のコントラクトに準拠するデータ オブジェクトは、それらを再生できるという考えです。この場合、契約は簡単です。source には reduceBalance というメンバー関数が必要であり、destination には increaseBalance というメンバー関数が必要です。この特定のケースでは、let inline とメンバーの制約を使用してそれを実現できます。しかし、インターフェイスとオブジェクトを指定した一連の関数を書きたいと思います。この場合、それはソース (オブジェクトとして) であり、
タイプとして。結果は、ソース オブジェクトの同じ名前のメソッドにメソッド呼び出しをパイプする sourceContract 型のオブジェクトになります。
use-case - DCI とユース ケース スライス
Ivar Jacobsonは、著書「ユース ケースを使用したアスペクト指向ソフトウェア開発」で、 「ユース ケース スライス」を紹介しています。DCI とユース ケース スライスは、同じ (または少なくとも類似した) アイデアに基づいているようです。
DCI とユース ケース スライスの違いは何ですか?
interaction - DCI、「コンテキスト」の概念に問題があり、どの役割がお互いを認識しているか
ここで重要な概念が欠けているだけかもしれません。「ダム」データ オブジェクトを理解しています。また、ロールは、ダム オブジェクトがそのロールを引き受けるときに適用されるメソッドのステートレス コレクションであることも理解しています。また、コンテキストが、実装されるアルゴリズムで行われるアクターを組み立てることも理解しています。しかし、役割がお互いについて何を知っているか、そしてそれらが文脈の中で定義されなければならないか、それとも文脈の外で定義されなければならないかは、私にはわかりません.
コンテキストに start と end の 2 つの役割があるとします。私たちのユースケースは文字列連結なので、各ロールに文字列を割り当てます。
いくつかの疑似コード:
concat() (メソッド) と start.concat(?) (呼び出し) の 3 つの異なる組み合わせが必要になる場合があります。
ロールは、同じコンテキスト内の他のロールを認識しています (ロールを他のコンテキストで再利用できないようにすることは、私には間違っているようです)。
ロールはコンテキスト内の他のロールを認識しないため、それらを引数として渡す必要があります (コンテキストが任意の数のロールを持つ可能性があるため、30 を渡す必要があるメソッドを開始することでコンテキストが開始される場合、これは苦痛に思えます) 'roles' を 1 つのメソッド呼び出しに引数として入れ、それらをずっと連鎖させてください!) (注: この例では、ロールの定義をコンテキストの外に移動して、複数のコンテキストで再利用することができます)
私にとって最も明白な選択は、コンテキストに強制的にメソッドを開始させないようにすることです。次に、インタラクション ロジックをコンテキストに配置し、非インタラクティブな部分をロールに配置します。(注: この例では、役割の定義がコンテキストの外に移動され、いくつかのコンテキストで再利用される場合があります)
ただし、これはこれと矛盾しているようです: http://en.wikipedia.org/wiki/Data,_Context_and_Interaction#Execution_Model
- Context は、ユース ケースに参加する最初のオブジェクトで Role メソッドを呼び出します。
- その時点から、ロールは互いのメソッドを呼び出してユース ケースを実行します。
domain-driven-design - DDD(Domain-driven design) DCIを組み合わせてアプリケーションを設計する方法
DDD は Domain-Driven Design であり、ユビキタス言語、ルート エンティティ、値オブジェクト、および集計を含む方法論です。
DCI: Data, Context, Interactions は、Trygve Reenskaug によって考案されたプログラミング パラダイムです。
新しいシステムでそれらを組み合わせるにはどうすればよいですか?
ruby - 複数のモジュールで拡張されたオブジェクト内のメソッドの Ruby の優先順位
以下を考えると:
の優先順位を設定する方法はありUser#default_context
ますか? つまり、どの順番で延長されても、Admin#default_context
常に が優先されるということでしょうか。RegisteredUser#default_context
current_user
ruby-on-rails - DCI パターンで動作をテストするには?
DCI パターンを実験するための簡単な Web ゲームを書いていますが、コンテキストを適切にテストする方法を知りたいと思っていました。
https://gist.github.com/1718889
CharacterAttacksAnotherCharacter
2 つの文字を取り、それらを 2 つの役割 (Attacker
および) で拡張するコンテキストがありますTarget
。次に、コンテキストが実行されます。
しかし、実装ではなく、この実行の動作をテストするにはどうすればよいでしょうか?
ありがとう!