2

场景:我有一个需要以某种方式调整的功能(例如;使其在不同地方的工作方式略有不同)。出于某种原因,我最终不得不在代码中添加一些丑陋的东西,无论是在函数中还是在现有的调用站点。假设在这两种情况下,“丑陋”的总和是相同的。

问题是我应该选择哪个选项,为什么?

我应该封装它以便我不需要查看它还是应该提取它以便它不会向函数添加语义垃圾?

什么会影响你的选择?如果:

  • 除了从当前位置之外,该函数将“永远不会”被调用。
  • 对函数的新调用不需要“丑陋”。
  • 该功能现在非常干净和通用
  • 该功能已经是一项黑客工作。
  • 你写了函数
  • 你没有写出这个功能
  • 等等
4

5 回答 5

5

把丑陋的东西放在功能中,放下手。如果这是在 C++ 中,请确保在 .cpp 文件中有实现。也许您可以考虑编写两个函数来从主函数体中抽象出丑陋的东西。

程序/OOP 编程的存在是为了将“丑陋”从界面中剔除(除其他外)。重要的是要意识到调用函数所需的代码越多,它的用处就越少。还要记住清楚地记录代码并注意那里有丑陋的代码以及原因。

此外,如果此函数足够大,您可以考虑将其放入自己的 .cs 文件或 .cpp/.h 对(取决于您使用的语言)。

于 2008-10-16T00:18:40.767 回答
3

如果新调用者不需要丑陋,那么我会将丑陋封装在一个新函数/助手/任何东西中,并从旧调用者那里调用它,这样它就不会污染新调用者的现有函数,也不会在老来电者之间重复。

如果新的调用者永远不需要它,那么我会将它添加到函数中(如果它在函数的上下文中有意义),因为它本质上是一个遗留组件,只要你可以适当地测试功能。

最重要的是,我会尽量减少在多个调用者之间没有重复和最大限度地减少对新代码的暴露的丑陋。我会将它封装到可以对其进行单元测试的程度。

谁写的不会影响我的决定。

于 2008-10-16T00:20:28.017 回答
0

我会将丑陋的东西封装在一个包装器函数中,并更改所有需要丑陋器的函数来使用包装器。

//old call
call_some_function_with_ugly(params, case)

// new call
call_some_function(params)

void call_some_function(params){ }

void call_some_function_with_ugly(params, case){
    // do ugly depending on case
    switch(case) { ... }

    call_some_function(params);
}
于 2008-10-16T02:30:39.050 回答
0

我会亲自将它放在函数声明中 - 我无法理解将它放在函数调用中如何“不那么难看”,因为您可能(至少,您暗示)您必须使用“丑”不止一次。

于 2008-10-16T00:22:00.043 回答
0

绝对把丑陋放在函数里。您可以做的最糟糕的事情之一是将丑陋传播到代码的其余部分,在许多单独的实例中它将被隔离。一旦丑陋以某种不可预见的方式发生变化(丑陋经常发生这种情况),这些将无法追踪。

当然,最好的选择是一开始就没有任何丑陋……你现在在想什么特别的例子?

于 2008-10-17T06:31:50.623 回答