【问题标题】:Best practice for writing lots of similar functions/processes编写大量类似功能/流程的最佳实践
【发布时间】:2013-11-04 13:27:15
【问题描述】:

我有一些与语言无关和设计模式相关的问题,尽管我正在使用 javascript/node.js 进行编程,如果这很重要的话。 对于一些有经验的程序员来说,这实际上非常简单,也许微不足道。

假设我们有一个函数/方法通过调用处理特定子问题的其他函数来执行某些过程(称为业务逻辑)。

function doProcess(){
subProcessA();
subProcessB();
subProcessC();

return "OK"
}

然后,我们得到任务来执行类似的流程,但这个新流程不能调用 subProcessA。 例如,我们有下一部分代码:

function doProcess2(){
subProcessB();
subProcessC();

return "OK"
}

所以我的问题是如何设计代码或者我应该:

A) 每次都为新流程创建新功能,就像上面的示例一样,但是我有很多冗余代码并且每次都重复自己。

B) 在这样的过程代码中做大 IF:

if(some-condition){
    subProcessA()
 }

但是我的代码看起来会很糟糕。

C) 直接在 subprocessA 中迁移该 IF :

if(!some-condition){
     return // do nothing
} 

但它又看起来像耦合代码,而且我觉得这不是最好的方法。

D) 别的?

【问题讨论】:

  • 我会说这取决于您正在使用的具体代码。对于 JavaScript 来说更是如此,因为您可以用许多不同的方式完成几乎相同的任务。我知道这是一个非常笼统的答案。但是,您的描述是一种外观模式。

标签: node.js design-patterns theory


【解决方案1】:

这一切都归结为您调用 subFunctionN() 执行该子任务的频率很重要。现在,如果您有一个线性依赖项,其中您需要在另一个子函数之前调用一个子函数,并且如果这种耦合在您的代码中比这种耦合更占主导地位,那么应该将这种耦合作为一个单独的子函数的一部分,该子函数执行更多而不仅仅是一个子任务。

例如:

Function MasterFunctionA(){
    subFunctionCouplet_12();
    subFunction3();
}

Function MasterFunctionB(){
    subFunction1();
    subFunction3();
}

Function subFunctionCouplet_12(){
    subFunction1();
    subFunction2();
}

Function subFunction1(){
    //do something here...
}

Function subFunction2(){
    // do something here...
}

Function subFunction3(){
    // do something here...
}

虽然这只是一个示例,说明如何模块化您的代码以免重复自己,但您的代码的实际实现将完全取决于您对模块化的喜好。这里要遵循的基本准则是,您不要在多个函数中重复实际的业务逻辑,但封装函数可以在整个代码中重复任意次数,前提是您可以将重复保持在最低限度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 2022-01-21
    相关资源
    最近更新 更多