-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
61 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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의 장바구니에서 운영하는 특별한 규칙 | ||
- 비즈니스 규칙에서 장바구니가 배열인지 알아야 한다면 문제가 된다. | ||
|
||
> 도메인 계층에서 일급 콜렉션을 자주 사용하는데 자료구조에 의존하는 일급콜렉션은 뭐지?!?! |