-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
2회차3장, 4장3장, 4장
Description
액션이 전체 코드로 퍼져나가는 코드를 개선해봤습니다.
배운대로 구현하다보니 고민되는 상황에 대해 의견을 나누고 싶습니다.
액션이 전체 코드로 퍼져나가는 코드
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;
})
}❓ 질문
아래의 액션 중에서 어떤것이 가장 괜찮은지 고민이 됩니다.
액션과 계산은 테스트를 위해 나눌수록 좋으니까 세번째꺼는 안좋은 방법일것 같기도 하고, 어떤게 좋은 방법인지 모르겠습니다.
좋다고 생각하시는 방법이나, 새로운 방법이 있으신가요?!
수수료_결정하기함수가 반복해서 두번 실행되는 액션
const 수수료_보내기 = () => {
const 제휴사목록 = fetchAffiliatesFromDB();
const 수수료보낼제휴사목록 = 수수료_보낼_목록_결정하기(제휴사목록);
수수료보낼제휴사목록.forEach((제휴사) => {
sendPayout(제휴사.bank_code, 수수료_결정하기(제휴사.sales, 제휴사.commission))
})
}- 수수료를 저장하는 계산과 저장한 목록 데이터를 하나 더 만드는 방법
const 수수료_저장하기 = (수수료보낼제휴사목록) => {
수수료보낼제휴사목록.map((제휴사) => {
const 수수료 = 수수료_결정하기(제휴사.sales, 제휴사.commission);
return {...제휴사, sendCommission: 수수료};
})
}
const 수수료_보내기 = () => {
const 제휴사목록 = fetchAffiliatesFromDB();
const 수수료보낼제휴사목록 = 수수료_보낼_목록_결정하기(제휴사목록);
const 수수료저장된목록 = 수수료_저장하기(수수료보낼제휴사목록);
수수료저장된목록.forEach((제휴사) => {
sendPayout(제휴사.bank_code, 제휴사.sendCommission);
})
}- 계산을 액션에 넣어서
수수료_결정하기함수를 한번만 부르기
const 수수료_보내기 = () => {
const 제휴사목록 = fetchAffiliatesFromDB();
제휴사목록.forEach((제휴사) => {
const 수수료 = 수수료_결정하기(제휴사.sales, 제휴사.commission);
if(수수료 > 100) {
sendPayout(제휴사.bank_code, 수수료);
}
})
}sue6e2 and haryan248
Metadata
Metadata
Labels
2회차3장, 4장3장, 4장