DCI 是一种范式,因此不仅仅是一种设计应用程序的方式。这是一种思考建模和结构化代码的方式。DCI 的重要部分之一是将系统是什么(域模型)和系统做什么(功能)分开。DCI 不是解决与 MVC 相同问题的不同方法,因此您的第一个问题无法真正得到回答。您可以同时使用 MVC 和 DCI,这并非巧合,因为 Trygve Renskaug 是 MVC 和 DCI 之父。他最近在 google 群组“object-composition”上回答了与此类似的问题。
您链接到的示例违反了一些基本思想,例如将角色对上下文保持私有,并且我实际上也找不到单个上下文,但这可能是由于只花费了很短的时间浏览代码。
我自己不了解 RoR,所以我不能给你一个 RoR 的例子,但是如果你去fullOO,你会发现用不同的语言编写的例子,包括 Ruby 和 Marvin,这是为 DCI 设计的第一种语言。
编辑“什么是 DCI”这个问题没有简单的答案,DCI 是一种范式,就像 OOP 是一种范式一样。它们都有相同的根源,回答上述问题就像回答“什么是面向对象编程”一样复杂。由于 DCI 是面向对象的,而所有主要 OO 语言中的 OOP 实际上是面向类而不是面向对象的,事情变得更加复杂。DCI 旨在生成运行时对象之间的交互在编译时在代码中可见的代码,并且更一般地说,试图通过阅读代码更容易地推断运行时行为。网站_我在上面链接到的内容致力于解释 DCI 的全部内容,并列出了多种语言的示例。红宝石就是其中之一
编辑有一本关于 ruby 和 DCI 的书正在出版中。作者在对象组合和洞察力方面非常活跃