【发布时间】:2014-04-13 20:25:52
【问题描述】:
我有一个“A”类,几乎可以满足我的需求。 “B”类使用“A”类
我现在设计了“C”类和“D”类,并注意到“B”类、“C”和“D”类中有大量代码重复使用“A”类。我已经在每个类中的特定独立函数中分离出这段代码。
现在我想知道这段代码应该放在哪里。目前,函数在三个调用类(B、C 和 D)中重复。
将函数放入“A”类会破坏单一责任原则。添加功能的继承可能会破坏 SRP 和 LSP。
似乎可行的方法是作曲。
问:为几个函数设计一个完整的类是否超过了kill?
问:类“B”、“C”和“D”访问新类“E”(取决于 A)和旧类“A”(必须是与新类“E”中的实例相同的实例),还是应该新类“E”提供足够的功能以使 B、C 和 D 类不需要直接访问 A 类?它似乎是一个带有附加功能的不完整界面。
或者新的'E'类应该做些什么并将结果返回给B、C、D类,然后他们可以自己传递给'A'类。实际上,不,那无法工作,因为该类将不得不再次调用某些返回值。
或者我应该以完全不同的方式来做吗?
(为什么软件设计需要这么多思考?)
使用场景示例:
B 类:while ((A->DoSomething() == ERROR/TIMEOUT/etc) && (retries SetSomeParameters(); }
(实际代码更大)
【问题讨论】:
-
我认为您需要在问题中附加一个非常简单的示例。
-
这些重复的函数是否需要任何实例变量?或者它基本上是向函数发送一些东西并返回你需要的东西?例如,您发送一个以毫秒为单位的函数,它会返回一个以分钟、秒和毫秒为单位的时间字符串。
-
是的,这些函数需要实例变量,因为它们会检查依赖类的返回码并在某些情况下重试。
标签: c++ class code-duplication