Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns DCI-数据、上下文和交互-MVC的继承者?_Design Patterns_Dci - Fatal编程技术网

Design patterns DCI-数据、上下文和交互-MVC的继承者?

Design patterns DCI-数据、上下文和交互-MVC的继承者?,design-patterns,dci,Design Patterns,Dci,向一个组织推销它的最佳描述是什么 它是由…的创造者创造的 它真的是MVC的继承者还是仅仅是另一种模式?它的优点和缺点是什么?我得到的印象是,它与其说是MVC的继承者,不如说是一个补充,例如,图5中的这两个都有。我认为这有助于使模型和控制器之间的区别更加合理,或者可能有助于控制器的不同部分或模型的不同部分之间的区别 基本思想似乎是为数据类的特定操作拆分逻辑,并将其移动到traits/mixin/whatever,每个(用户)操作一个。您将有许多小代码段,而不是几个大代码段。另外,听起来添加新的mi

向一个组织推销它的最佳描述是什么

它是由…的创造者创造的


它真的是MVC的继承者还是仅仅是另一种模式?它的优点和缺点是什么?

我得到的印象是,它与其说是MVC的继承者,不如说是一个补充,例如,图5中的这两个都有。我认为这有助于使模型和控制器之间的区别更加合理,或者可能有助于控制器的不同部分或模型的不同部分之间的区别


基本思想似乎是为数据类的特定操作拆分逻辑,并将其移动到traits/mixin/whatever,每个(用户)操作一个。您将有许多小代码段,而不是几个大代码段。另外,听起来添加新的mixin应该比向基类添加功能“更好”。个人行动代码可能会(我认为)更分散,但不同动作的代码应该更清晰和明显分离。

< P>它完全是我在现代C++设计中的基于策略的Andrei Alexandrescu设计,但是工作更低级,DCI看起来像是一个包含部分方法论的架构(用例驱动设计)。

Trygve在

创建DCI是为了解决面向对象中的一个问题:审查OO代码太难了

OO中一个用例的代码通常分布在许多类之间。要理解代码是如何工作的,还必须了解运行时中对象之间的关系。这些关系不是在代码中设置的,它们取决于具体情况

DCI建议将给定用例的代码从类中分离出来,放入称为上下文的不同工件中。不同类的对象可以在此上下文中进入关系,并在具有不同角色的情况下参与交互

DCI的全部目的是使OO代码更具可读性


这就是我的想法。

一个好问题,也是一个经常出现的问题。简而言之,这是一个基于Kay、Dahl和其他人的OO创建思想的范例。正如你所注意到的那样,它是由Trygve Reenskagug创建的,其中有几个目标。其中一个目标是使信息作战成为该计划的一流公民。(不是磁盘操作中的IO,而是两个不同对象之间的所有通信)。DCI的另一个重要目标是将系统的功能(功能/行为)与系统的功能(数据)分开。

我认为提高系统理解能力对任何组织来说都是一个巨大的胜利,但您也可以证明DCI是MVC的一个改进,这是由于以下其他因素:

  • 干净地分离系统行为和数据为数据聚合活动提供了许多好处,包括由于域对象占用的空间更小而具有更高性能的实时分析
  • 当数据对象和行为对象有自己的居住地时,跨功能部门重用数据对象和行为对象要容易得多,而不是像随机放置在系统中混合数据/行为对象的子集中一样成为微粒
  • 随着BDD逐渐成为事实上的敏捷方法论,该组织在这一实践中将领先于行业的其他部分,并可能成为其他志同道合的组织的榜样

  • 个人行为的代码将不会太分散,因为它们将被放到上下文中。答案的最后一部分与DCI的目标相矛盾。DCI的一个明确目标是将算法的各个部分保持在一个位置。通常通过将用例的实现放在一个地方来进行示例,您没有回答这个问题。是的,链接为+1。我实际上是在寻找itNice的答案,我想一点一点地补充一下,其中一个角色是简化业务逻辑中的更改,因为上下文表示实际的业务逻辑和哑模型对象之间的交互。因此,如果业务逻辑出现在一个地方,那么很容易更改它,这也将减少引入的bug数量。