DCI的核心是它爲開發人員提供的認知工具。我不確定你是否看過所有優秀的講座,但我會盡力爲任何新概念的人提煉它的要點。它涉及將系統行爲從系統的交互域對象(數據實體或系統是什麼)中移出來,並將其作爲第一類公民調用對象之間的協作,方法是將行爲對象(系統所做的事)注入功能在一個用例適時的情況下。
認爲BDD。我們將行爲編碼爲不跨越許多對象,例如分佈在與持久層高度耦合的數據對象上的功能粒子,而是僅存在於用例(故事)中的內聚對象,以及將能力注入並協調這些啞數據對象的交互。像物理體系結構的純粹層次一樣,緩慢變化的數據對象不會隨着他們隨身攜帶的快速變化的功能實現而加載。相反,Ruby提供了在/僅在用例情況下需要時,可以在運行時輕鬆地將行爲注入到對象中的能力。
作爲ROR的一個例子,如果您有一個控制器操作涉及一個用例,其中有一個事件概率矩陣,其中大部分條目可能只在一小部分請求中被觸發,那麼實例化一個臃腫行爲網絡 - 對於數據的每個可能的用例來說,執行每個事件的知識都是不必要的。另外,無需在我的文本編輯器中深入瞭解18個文件,以瞭解該交互如何工作,並將所有邏輯完全抽象爲由上下文對象提供的接口中的模式,這也是一個明顯的優勢。
關於你關於控制器和模型之間的另一個抽象層的問題,我不確定你指的是哪一個。無論如何,是的。無論如何。沒問題。 Design patterns和Bob叔叔的'SOLID原則是OO設計中幾乎普遍接受的最佳實踐。這些都強烈地鼓勵在政策和實施之間鬆散耦合的抽象。它們都有助於避免羅馬帝國的精神崩潰,因爲它們提供了一個人人都能理解的共同框架。對我而言,DCI提供了相同類型的認知框架,但是爲了使系統更易於理解和有效處理,這是任何面向對象設計師的聖盃。
你的問題是極其廣泛,有非常難以回答。有相當多的地方,你似乎還沒有完全明白DCI是如何更難回答DCI背景下的一些問題的。我可以幫助你與DCI的東西,如果這是目標,但你需要縮小範圍,然後 – 2012-03-28 13:12:43
我最想知道什麼是* DCI。至於Rails的實現,一個簡單的例子甚至是兩行的解釋都會很棒。 – GeReV 2012-03-28 14:10:21
偉大的問題。直到讀完這篇文章,我才知道我最近一直渴望的範例的名字。我一直在看我維護的代碼(我沒有寫),並思考「這需要什麼是數據和行爲之間的分類分離」。我想這正是DCI試圖去做的。 – 2012-03-28 17:37:29