DCIの中心にあるのは、 DCIが開発者に提供するコグニティブ ツールです。James Coplien/Trygve Reenskaugの素晴らしい講義をすべて見たかどうかはわかりませんが、概念に慣れていない人のために要点を抽出しようとします. それは、システムの相互作用するドメイン オブジェクト (データ エンティティ、またはシステムとは何か) から、オブジェクトに機能を注入することによってオブジェクト間のコラボレーションを仲介するファースト クラスの市民として、システムの動作を動作オブジェクト (システムが行うこと) に移動することです。ジャストインタイムのユースケースのコンテキストで。
BDD を考えてみてください。パーシスタンス レイヤーに高度に結合されたデータ オブジェクト全体に広がる機能の微粒子のように、多くのオブジェクトにまたがって動作をコーディングするのではなく、ユース ケース (ストーリー) のためだけに存在し、機能を注入して調整するまとまりのあるオブジェクト内で動作をコーディングします。これらのダムデータオブジェクトの相互作用。物理アーキテクチャの純粋な層のように、ゆっくりと変化するデータ オブジェクトには、常に持ち歩いている急速に変化する機能の実装が積み込まれているわけではありません。むしろ、Ruby は、ユースケースのコンテキストでのみ必要な場合に、実行時に動作をオブジェクトに簡単に挿入する機能を提供します。
ROR の例として、ほとんどのエントリがわずかな割合のリクエストでのみトリガーされる可能性があるイベント確率マトリックスがあるユース ケースにコントローラー アクションが関与している場合、肥大化した動作の重いオブジェクトのネットワークをインスタンス化します。データの考えられるすべてのユースケースに対してすべてのイベントを実行する知識は不要です。また、テキスト エディターで 18 個のファイルを掘り下げてインタラクションがどのように機能するかを理解する必要がないことと、すべてのロジックがコンテキスト オブジェクトによって提供されるインターフェイスのパターンに明確に抽象化されていることも明確な利点です。
レールのコントローラーとモデルの間の「別の」抽象化レイヤーに関する質問については、他のどれを参照しているのかわかりません。とにかく、はい。ぜひ。問題ない。設計パターンと Uncle Bobs のSOLID原則は、OO 設計において一般的に受け入れられているベスト プラクティスです。これらはどちらも、ポリシーと実装の間の疎結合の抽象化を強く促進します。どちらも、誰もが理解できる共通のフレームワークを提供するため、ローマ帝国の壊滅的な規模の壊滅的なブレインダンプを回避するのに役立ちます. 私にとって DCI は、同じタイプのコグニティブ フレームワークを提供しますが、システムをより簡単に理解し、効果的に処理できるようにするためのものです。これは、あらゆるオブジェクト指向デザイナーにとっての聖杯です。