什么是DCI,它如何适应Rails?
最近与同事讨论了在Rails应用程序中设计和编写模型的不同方法,让我在Rails的上下文中跨越了DCI。
然而,即使在通过这个示例应用程序之后,我似乎也无法围绕整个概念。
目前,在编写Rails应用程序时,我倾向于或多或少地“通过本书”。
所以我想问一些问题 -
编辑
我希望在RoR的背景下进一步扩展我的问题 - Rails推荐的模型和控制器之间的另一个抽象层次是什么? 它在不同规模的应用中有多广泛?
DCI是一种范例,因此不仅仅是一种设计应用程序的方式。 这是一种思考建模和结构化代码的方法。 DCI的一个重要组成部分是保持系统(领域模型)和系统的功能(功能)。 DCI不是解决与MVC相同的问题的另一种方法,因此您的第一个问题无法真正回答。 您可以同时使用MVC和DCI,这不是巧合,因为Trygve Renskaug是MVC和DCI的父亲。 他最近在谷歌组织的“对象组合”上回答了类似的问题。
您链接的示例违反了一些基本概念,例如将角色保留为上下文隐私,并且实际上也找不到单个上下文,但这可能是由于浏览代码的时间很短。
我不认识RoR我的自我,所以我不能给你一个RoR例子,但是如果你去fullOO,你会发现用不同语言编写的例子,包括Ruby和Marvin为DCI设计的第一语言。
编辑对于“什么是DCI”这个问题,没有简单的答案.DCI是一个范例,就像OOP是一个范例。 他们都具有相同的根源,回答上述问题与回答“什么是对象定向编程”一样复杂。 由于DCI是面向对象的,事实更加复杂,所有主要面向对象语言的面向对象实际上都是面向类而不是面向对象的。 DCI旨在生成代码,在运行时对象之间的交互在编译时在代码中可见,并且更一般地说,试图通过阅读代码来更容易地推断运行时行为。 我上面链接的网站致力于解释DCI的全部内容,并列出了许多语言的示例。 Ruby就是其中之一
编辑有一本关于ruby和DCI的书。 作者在对象组合和洞察力方面非常活跃
对于那些想知道DCI代表什么的人来说..
DCI代表Data Context Interaction
DCI的核心是它为开发人员提供的认知工具。 我不确定你是否看过所有伟大的James Coplien / Trygve Reenskaug讲座,但我会尽力为任何新概念的人提供它的要点。 它涉及将系统行为从系统的交互域对象(数据实体或系统是什么)中移出来,并将其作为第一类公民调用对象之间的协作,方法是将行为对象(系统所做的事)注入功能在一个用例适时的情况下。
认为BDD。 我们将行为编码为不跨越许多对象,例如分布在与持久层高度耦合的数据对象上的功能粒子,而是仅存在于用例(故事)中的内聚对象,以及将能力注入并协调这些哑数据对象的交互。 像物理体系结构的纯粹层次一样,缓慢变化的数据对象不会随着他们随身携带的快速变化的功能实现而加载。 相反,Ruby提供了在/仅在用例情况下需要时,可以在运行时轻松地将行为注入到对象中的能力。
作为ROR的一个例子,如果您有一个控制器操作涉及一个用例,其中有一个事件概率矩阵,其中大部分条目可能只在一小部分请求中被触发,那么用一个臃肿的行为沉重的对象实例化对于数据的每个可能的用例来说,执行每个事件的知识是不必要的。 另外,无需在我的文本编辑器中深入了解18个文件,以了解该交互如何工作,并将所有逻辑完全抽象为由上下文对象提供的接口中的模式,这也是一个明显的优势。
关于你在控制器和模型之间的'另一个'抽象层的问题,我不确定你指的是哪一个。 无论如何,是的。 无论如何。 没问题。 设计模式和Bob叔叔的SOLID原则在OO设计中是非常普遍接受的最佳实践。 这些都强烈地鼓励在政策和实施之间松散耦合的抽象。 它们都有助于避免罗马帝国的精神崩溃,因为它们提供了一个人人都能理解的共同框架。 对我而言,DCI提供了相同类型的认知框架,但是为了使系统更易于理解和有效处理,这是任何面向对象设计师的圣杯。
链接地址: http://www.djcxy.com/p/47191.html上一篇: What is DCI and how can it fit with Rails?
下一篇: How to run `rails generate scaffold` when the model already exists?