elegant-functional-2023 / elegant-function-2023

우아한스터디 2023 여름시즌: 쏙쏙 들어오는 함수형 코딩 스터디 레포입니다.
MIT License
5 stars 1 forks source link

reduce로 시간 여행 하기 #6

Open dev-hamster opened 1 year ago

dev-hamster commented 1 year ago

reduce로 시간 여행 하기

p313 reduce()로 할 수 있는 것들

시간 여행 디버깅

reduce로 시간 여행을 어떻게 할 수 있는지 알아보았습니다.

reduceevent 종료 후 상태 계산하기

reduce를 활용해 일련의 events 이후 account 의 잔고 변화를 알 수 있습니다.

const events = [
  { type: 'open', id: 'account1', balance: 150 },
  { type: 'open', id: 'account2', balance: 0, },
  { type: 'transfer', fromId: 'account1', toId: 'account2': amount: 50 }
]

const accounts = events.reduce((accounts, event) => {
  if (event.type === 'open') {
    accounts[event.id].balance = event.balance
  } else if (event.type === 'transfer') {
    accounts[event.fromId].balance -= event.amount
    accounts[event.toId].balance += event.amount
  }
  return accounts
}, {})

// {
//    account1: { balance: 100 },
//    account2: { balance: 50 }
// }

마지막 이벤트 되돌리기

const accounts = events.splice(-1).reduce((accounts, event) => {
  if (event.type === 'open') {
    delete accounts[event.id]
  } else if (event.type === 'transfer') {
    accounts[event.fromId].balance += event.amount
    accounts[event.toId].balance -= event.amount
  }
  return accounts
}, {})

// {
//    account1: { balance: 150 },
//    account2: { balance: 0 }
// }

참고-https://blog.risingstack.com/event-sourcing-with-examples-node-js-at-scale/

chloe-codes1 commented 1 year ago

132p 하단 "되돌리기" 에 대한 답이 될 수 있겠네요!