Skip to content

3장 계산을 여러번 호출하는 것과 계산을 더 분리하는것, 액션과 계산을 분리하는것 에 대한 고민 #13

@choseonghwan91

Description

@choseonghwan91

액션이 전체 코드로 퍼져나가는 코드를 개선해봤습니다.
배운대로 구현하다보니 고민되는 상황에 대해 의견을 나누고 싶습니다.

액션이 전체 코드로 퍼져나가는 코드

const figurePayout = (affiliate) => {
    const owed = affiliate.sales * affiliate.commission;
    if(owed > 100) {
        sendPayout(affiliate.bank_code, owed);
    }
}

const affiliatePayout = (affiliates) => {
    affiliates.forEach((affiliate) => figurePayout(affiliate));
}

const main = (affiliates) => {
    affiliatePayout(affiliates);
}

배운 과정대로 진행

생각해보기

  • 제휴사 목록 가져오기
  • 제휴사 목록
  • 수수료 결정하기
  • 수수료
  • 수수료 보낼 목록 결정하기
  • 수수료 보낼 목록
  • 수수료 보내기

액션, 계산, 데이터로 나눠보기

  • 제휴사 목록 가져오기 액션
  • 제휴사 목록 데이터
  • 수수료 결정하기 계산
  • 수수료 데이터
  • 수수료 보낼 목록 결정하기 계산
  • 수수료 보낼 목록 데이터
  • 수수료 보내기 액션

과정 그려보기

액션 계산 데이터
DB에서 제휴사 가져오기 제휴사 목록
수수료 결정하기 수수료
수수료 보낼 목록 결정하기 수수료 보낼 목록
수수료 보내기

코드로 구현

제휴사(데이터)

const 제휴사 = {
    bank_code: 12,
    sales: 1010,
    commission: 0.1,
}

수수료 결정하기(계산)

const 수수료_결정하기 = (sales, commission) => {
    return sales * commission
}

수수료(데이터)

const 수수료 = 105

수수료 보낼 목록 결정하기(계산)

const 수수료_보낼_목록_결정하기 = (제휴사목록) => {
    return 제휴사목록.filter((제휴사) => {
       const 수수료 = 수수료_결정하기(제휴사.sales, 제휴사.commission);
       return 수수료 > 100;
    })
}

❓ 질문

아래의 액션 중에서 어떤것이 가장 괜찮은지 고민이 됩니다.
액션과 계산은 테스트를 위해 나눌수록 좋으니까 세번째꺼는 안좋은 방법일것 같기도 하고, 어떤게 좋은 방법인지 모르겠습니다.
좋다고 생각하시는 방법이나, 새로운 방법이 있으신가요?!

  1. 수수료_결정하기 함수가 반복해서 두번 실행되는 액션
const 수수료_보내기 = () => {
    const 제휴사목록 = fetchAffiliatesFromDB();
    const 수수료보낼제휴사목록 = 수수료_보낼_목록_결정하기(제휴사목록);
    수수료보낼제휴사목록.forEach((제휴사) => {
        sendPayout(제휴사.bank_code, 수수료_결정하기(제휴사.sales, 제휴사.commission))
    })
}
  1. 수수료를 저장하는 계산과 저장한 목록 데이터를 하나 더 만드는 방법
const 수수료_저장하기 = (수수료보낼제휴사목록) => {
    수수료보낼제휴사목록.map((제휴사) => {
        const 수수료 = 수수료_결정하기(제휴사.sales, 제휴사.commission);
        return {...제휴사, sendCommission: 수수료};
    })
}

const 수수료_보내기 = () => {
    const 제휴사목록 = fetchAffiliatesFromDB();
    const 수수료보낼제휴사목록 = 수수료_보낼_목록_결정하기(제휴사목록);
    const 수수료저장된목록 = 수수료_저장하기(수수료보낼제휴사목록);
    수수료저장된목록.forEach((제휴사) => {
        sendPayout(제휴사.bank_code, 제휴사.sendCommission);
    })
}
  1. 계산을 액션에 넣어서 수수료_결정하기 함수를 한번만 부르기
const 수수료_보내기 = () => {
    const 제휴사목록 = fetchAffiliatesFromDB();
    제휴사목록.forEach((제휴사) => {
        const 수수료 = 수수료_결정하기(제휴사.sales, 제휴사.commission);
        if(수수료 > 100) {
            sendPayout(제휴사.bank_code, 수수료);
        }
    })
}

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions