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

Gab*_*bák 4 architecture oop dci

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

Run*_* FS 6

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

我知道最适合不同的语言

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

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