我正在设计一个用户可以扩展的框架。 基本上我会为他们提供一组他们可以实现的接口(interface),我的“manager”类将像这样调用他们的实现:
abstract1 = factory.GetConcreteExtension1()
abstract2 = factory.GetConcreteExtension2()
abstract1.DoSomething(abstract2)
我的客户实现抽象的具体版本的地方。 然而,他们可能决定将数据添加到不在abstract2接口(interface)中的concrete2。 这将迫使他们在crete.DoSomething实现中将abstract2向下转换为concrete2。
这看起来像代码味道,因为我强制他们实现一个方法(DoSomething),该方法在其签名中需要abstract1,但实际上只能得到concrete1(加上我强制他们编写强制转换)。
我找不到既能很好地定义契约(Contract)又能允许我的框架自行管理流程的解决方案。有什么想法吗?
最佳答案
因此,使用参数abstract2 调用abstract1 的DoSomething,并且您想从DoSomething 方法获取abstract2 的数据?
在这种情况下,在我看来,最好赋予abstract2行为,以便abstract1通过abstract2的行为而不是通过它的数据与其交互。
关于design-patterns - 垂头丧气可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1033619/