如何在包装类中处理数据类型

时间:2014-05-21 10:43:36

标签: design-patterns architecture adapter wrapper decorator

以下情况我不知道如何做对:

我的C#-Application有一个 ClassA ,我必须扩展一些功能。这是通过 ClassB 完成的,引用 ClassA 和"包装","装饰","适应" (或任何模式)班级。 我的 ClassA 定义了 ClassB 使用的一些数据类型,并为其他人公开。

因此,如果我的 ClassC 想要引用 ClassB ,它还必须引用 ClassA ,因为它具有类型的定义。

我不认为这是正确的:当我绕过一个类时,另一个使用包装类的类不应该知道有关包装类的任何内容。

我可以复制粘贴 ClassB 中的类型,但如果有变化,我必须做两次,我不认为这是正确的。

任何想法如何解决?

非常感谢, 约尔格

1 个答案:

答案 0 :(得分:0)

“你选择什么样的模式”对于这件事很重要,因为它会塑造你的设计;) 由于您似乎想隐藏 ClassA的界面,Adapter模式将是相关的。 (使用Decorator模式,ClassB也会继承ClassA,导致ClassA公开的相同数据类型也会被ClassB公开。)

现在回到问题:

看来你没有一个完美的解决方案。我们在ClassA TypeA 和ClassB TypeB 中调用数据类型。您要么将TypeA重用于TypeB并在两者之间创建依赖关系,要么使TypeB完全独立并重复自己。

如果您有令人信服的理由将 ClassA 与系统的其他部分完全分离,则可以使TypeA独立。它会违反 DRY ,但如果ClassA属于第三方并且他们决定更改其界面,则您的客户不会受到影响。

但是,在不太引人注目的案件中,这可能是一种矫枉过正。如果您拥有ClassA的代码,那么您可以将TypeA放在ClassA之外,以便所有其他客户端在没有(直接)依赖于ClassA的情况下使用它。