编写大量类似功能/流程的最佳实践

时间:2013-11-04 13:27:16

标签: node.js design-patterns theory code-design

我有一些语言不可知和设计模式相关的问题,虽然我在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)还有别的吗?

谢谢!

伊万

1 个答案:

答案 0 :(得分:0)

这一切都归结为这样一个问题,即你调用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...
}

虽然这只是一个如何模块化代码而不重复自己的例子,但代码的实际实现完全基于您对模块化的喜好。这里要遵循的基本原则是你不要在多个函数中重复实际的业务逻辑,但是在整个代码中封装函数可以重复多次,因为你可以将重复保持在最低限度。