DCI架构有哪些可能的设计?

时间:2010-04-05 13:14:16

标签: oop architecture dci

在不同的OOP语言中实现DCI(数据,上下文,交互)架构的设计有哪些?我想到了基于策略的设计(Andrei Alexandrescu)的C ++,DI和AOP for Java。但是,我还考虑过使用State设计模式来表示角色和某种用于交互的Template方法......还有其他可能性吗?

2 个答案:

答案 0 :(得分:6)

在大多数语言中,做纯DCI很难,通常会遇到两个问题之一。静态类型语言(如Java)通常最终会出现某种包装解决方案,从而产生self schizofrenia问题。允许您在运行时随意附加新实例方法的动态语言通常会遇到范围问题。当对象不再扮演角色时,RoleMethods仍然可用。

我知道最适合不同的语言

  • Marvin:设计DCI并因此获得全力支持
  • Ruby使用Maroon。如果您使用的是maroon gem(或类似的),那么Ruby中的DCI完全支持。
  • Java:Qi4J
  • C#扩展方法(范围问题和过载问题)可能与动态一起。我有一个基于Clay的实现,但这会产生身份问题
  • 原生Ruby:方法注入当对象不再扮演角色时,方法可用的范围问题
  • C ++:模板。范围问题方法寿命与对象寿命相同

如果您查看fullOO,您会找到几种语言的示例。包括在我自己的项目Marvin中,这是一种专门用于支持DCI的语言。目前Marvin的大多数都与C#完全相同,所以你可以说它是C#的扩展而不是它自己的语言。

答案 1 :(得分:2)

在Java中,如果没有字节码生成,我会将Decorator模式用于上下文,但是我将代替类装饰接口,这将更灵活。数据将通过实现接口的类表示。将使用手动依赖注入到Template方法中完成交互。

相关问题