4

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

4

2 回答 2

6

在大多数语言中执行纯 DCI 很困难,您通常会遇到两个问题之一。静态类型语言(如 Java)通常以某种包装器解决方案结束,这会产生 自我精神分裂症问题。允许您在运行时随意附加新实例方法的动态语言通常会遇到范围问题。当对象不再扮演角色时,RoleMethods 仍然可用。

我所知道的最适合不同语言

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

如果您查看fullOO,您会发现几种语言的示例。包括在我自己的项目 Marvin 中,这是一种专门为支持 DCI 而设计的语言。目前大部分 Marvin 与 C# 相同,因此您可以说它是 C# 的扩展,而不是它自己的语言。

于 2012-03-14T12:17:17.150 回答
2

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

于 2010-04-28T23:01:38.003 回答