Skip to content

Commit

Permalink
docs: 챕터5 더 좋은 액션 만들기
Browse files Browse the repository at this point in the history
  • Loading branch information
gutenLEE committed Apr 22, 2024
1 parent 0bde9ab commit fbd7564
Showing 1 changed file with 61 additions and 0 deletions.
61 changes: 61 additions & 0 deletions 챕터_5/이유희.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@


### 챕터 5. 더 좋은 액션 만들기


#### 암묵적 입력과 출력 줄이기

- 어떤 함수에 암묵적 입려과 출력이 있다면 다른 컴포넌트와 강하게 연결된 컴포넌트다
- 다른 곳에서 사용할 수 없으면 모듈이 아니다
- 암묵적 입출력이 있는 함수는 아무 때나 실행할 수 없기에 테스트하기 어렵다
- 액션을 계산으로 바꾸지 못하더라고 암묵적 입출력을 줄이면 테스트하기 쉽고 재사용하기 좋다


#### 계산 분류하기

- 어떤 도메인 구조를 알아야 하는 경우
- 비즈니스 규칙에 대한 함수

이렇게 구분하다보면 코드에서 의미있는 계층이 되기 때문에 기억해두면 좋다
계층은 엉켜있는 코드를 풀면 자연스럽게 만들어진다.

> 넥스트스텝 TDD 강의에서 포비님이 단위테스트를 작성하고 지우다 반복하다보면 리프 노드를 발견할 수 있고 그 지점이 단위테스트 시작점이 된다고 알려주셨다. 여기서 말하는 엉켜있는 코드를 푸는 방법과 같은 맥락인듯?

#### 엉켜있는 코드 풀기

- 함수를 사용하면 관심사를 분리할 수 있다
- 함수는 인자로 넘기는 값과 그 값을 사용하는 방법을 분리한다
- 분리된 것은 언제든 쉽게 조합할 수 있다
- ***엉켜있는 것을 풀면 개념을 중심으로 쉽게 구성할 수 있다***

분리의 장점
- 재사용하기 쉽다
- 유지보수하기 쉽다
- 테스트하기 쉽다



```
function add_item(cart, name, price){
var new_cart = cart.slice();
new_cart.push({
name: name,
price: price
});
return new_cart;
}
```
- 문제점
- add_item()이 cart, item 구조를 모두 알고 있다
- 개선
- add_item() 을 cart, item을 각각 다루는 함수로 분리한다


#### 비즈니스 규칙과 장바구니 기능 차이

- 일반적인 도메인과 핵심 도메인의 차이
- 일반적인 장바구니 기능이 아닌 MegaMart의 장바구니에서 운영하는 특별한 규칙
- 비즈니스 규칙에서 장바구니가 배열인지 알아야 한다면 문제가 된다.

> 도메인 계층에서 일급 콜렉션을 자주 사용하는데 자료구조에 의존하는 일급콜렉션은 뭐지?!?!

0 comments on commit fbd7564

Please sign in to comment.