减少公共代码调用公共类的代码重复
Posted
技术标签:
【中文标题】减少公共代码调用公共类的代码重复【英文标题】:Reducing code duplication from common code calling common class 【发布时间】: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();
(实际代码更大)
【问题讨论】:
我认为您需要在问题中附加一个非常简单的示例。 这些重复的函数是否需要任何实例变量?或者它基本上是向函数发送一些东西并返回你需要的东西?例如,您发送一个以毫秒为单位的函数,它会返回一个以分钟、秒和毫秒为单位的时间字符串。 是的,这些函数需要实例变量,因为它们会检查依赖类的返回码并在某些情况下重试。 【参考方案1】:如果如此重复的代码 (a) 很大 (ish),(b) 可能会同步更改为所有使用的类,因此 (c) 会冒着产生新错误的风险,我会选择创建一个包含该功能的(隐藏)类并根据需要继承它。
无论如何,请仔细考虑成本与收益。添加一个或多个函数版本会产生僵化,以后可能需要删除(再次拆分)。 “现在就开始工作,它可能以后会有用”往往只是为以后创造额外的工作(墨菲定律绝对无情)。整体架构比可能重复的细节更重要。
【讨论】:
以上是关于减少公共代码调用公共类的代码重复的主要内容,如果未能解决你的问题,请参考以下文章