开发代码时在代码中包含一些类似的块时遇到了一个问题。我的问题是:在功能之间共享逻辑的最佳方法是什么?

例:

下面的函数包含相同的if / else逻辑。我们如何重构该代码以拥有更简洁和可维护的代码?

// pseudo code...

const hirer = 'woman';

const getPositions = () => {
 if (hirer === 'woman') {
   getPositionsFromWomen();
   // do other stufs here...
 } else if (hirer === 'man') {
   getPositionFromMen();
   // do other stufs here...
 }
 // maybe other stufs here...
}


const hire = (hirer) => {
  if (hirer === 'woman') {
    increaseWomenHiringRate(hirer);
    // do other stufs here...
  } else if (hirer === 'man') {
    increaseMenHiringRate(hirer);
    // do other stufs here...
  }
 setPositionClosed();
}

最佳答案

一种相当标准的方法是参数化逻辑。在这种情况下,也许通过将逻辑放入接受函数的函数中,它将调用每个逻辑分支:

const hirer = 'woman';

const hirerDispatch = (hirer, ifWoman, ifMan) => hirer === 'woman' ? ifWoman() : ifMan();

const getPositions = () => {
  hirerDispatch(hirer, getPositionsFromWomen, getPositionFromMen);
  // maybe other stuff here...
};

const hire = (hirer) => {
  hirerDispatch(hirer, () => increaseWomenHiringRate(hirer), () => increaseMenHiringRate(hirer));
  setPositionClosed();
};


更复杂的参数化可能涉及为分支传递带有函数属性的对象,包括传递的参数(因此,我们不需要像hire中那样的包装器)等等。

10-05 23:48