2017-12-13 19 views
0

내 코드에 비슷한 블록이있는 코드를 개발할 때 문제가 발생했습니다. 내 질문은 : 함수간에 논리를 공유하는 가장 좋은 방법은 무엇입니까?함수간에 논리를 공유하는 방법은 무엇입니까?

예 :

함수로 아래/다른 논리 동일한 포함한다. 보다 간결하고 유지 보수가 쉬운 코드를 만들기 위해 어떻게이 코드를 리팩터링 할 수 있습니까?

// 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(); 
} 

답변

4

한 상당히 표준적인 방법은 매개 변수화 논리이다. 이 경우, 아마도 기능을 허용하는 기능에 논리를 넣어 각 논리적 지점을 요청합니다

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에있는 래퍼가 필요하지 않습니다.) 등등

0

로직을 포함하는 메소드에 Javascript 객체로 액션을 매개 변수로 전달하는 것이 쉬운 방법 중 하나입니다. 이 코드는 같을 것이다 방법입니다

const hirer = 'woman'; 

var positionHire = { 
    women: getPositionsFromWomen, 
    men: getPositionsFromMen 
} 
const getPositions = (hirer, positionHire) => { 
if (hirer === 'woman') { 
    getPositionsFromWomen(); 
    // do other stufs here... 
} else if (hirer === 'man') { 
    getPositionFromMen(); 
    // do other stufs here... 
} 
// maybe other stufs here... 
} 

var hireRate = { 
    women: increaseWomenHiringRate, 
    men: increaseMenHiringRate 
} 

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

귀하의/다른 유형 (hirer)에 스위치가있는 경우. 따라서 Replace conditional with polymorphism 수 있습니다. 두 번째 함수의 이름이 필요합니다. determineHiringRate()으로 추측합니다 (올바른 이름인지는 모르겠지만).

다음은 솔루션의 클래스 다이어그램이다 :

enter image description here

+0

감사합니다, @Fuhrmanator, 나는이 문제를 분석합니다. –