2010-04-05 35 views
4

在不同的OOP語言中實現DCI(數據,上下文,交互)架構有哪些可能的設計?我想到基於策略的設計(Andrei Alexandrescu)爲C++,DI和AOP開發Java。然而,我也想過使用狀態設計模式來表示角色和某種模板方法來進行交互...還有什麼其他的可能性?DCI架構有哪些可能的設計?

+0

從原來的紙,也有在斯卡拉性狀和公開課在Ruby中。 我的Stete設計模式建議是錯誤的,因爲如果我正確理解DCI,應該將數據從所知道的所有上下文中分離出來。 – 2010-04-23 13:33:47

+0

你的理解是正確的它的DCI的主要關切作出什麼系統是獨立的系統是什麼 – 2012-03-05 11:10:06

回答

2

在Java中,沒有字節代碼生成,我會使用Decorator模式爲背景,但是我會替代類裝飾接口,這將更加靈活。數據將通過實現接口的類來表示。交互將通過手動依賴注入到Template方法中完成。

+1

DCI是很難在Java中,但使用Qi4J得到是你非常接近(數據)之一。 Java中不同實現產生的主要問題是身份問題。 DCI是關於對象而不是類。裝飾者模式是基於類的。 在DCI中,(已經實例化的)對象的行爲通過角色方法進行擴展。這些方法是內部的而不是其他類或其他對象。 換句話說,你不能用裝飾模式來做DCI – 2012-04-04 13:38:10

6

做純粹的DCI是在最艱難的語言,你通常遇到的兩個問題之一。像Java這樣的靜態類型語言通常以某種封裝解決方案結束,這會產生一個self schizofrenia問題。允許您在運行時隨意附加新實例方法的動態語言經常會遇到範圍問題。當對象不再扮演角色時,RoleMethods仍然可用。

我知道

最適合不同語言

  • 馬文:對DCI,因此設計有完整的支持
  • 紅寶石使用栗色。如果您使用的是maroon gem(或類似的),那麼Ruby中的DCI將得到全面支持。
  • Java:Qi4J
  • C#擴展方法(範圍問題和過載問題)可能與動態一起使用。我有一個基於Clay的實現,但會產生身份問題
  • 原生Ruby:方法注入當對象不再扮演角色時可用方法的範圍界定問題
  • C++:模板。範圍界定問題方法的壽命是一樣的對象生命週期

,如果你看一看fullOO你會發現在幾種語言的例子。在我自己的項目中包括Marvin,這是一種專門爲支持DCI而設計的語言。目前,Marvin的大多數與C#相同,所以你可以說它是C#的擴展,而不僅僅是它自己的權利。

+0

你應該把Ruby的例子改成Maroon。 :) – ciscoheat 2013-06-01 03:18:01

+0

@ciscoheat thatnks指針 – 2013-06-01 08:55:53