-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[이유희] 챕터 5: 더 좋은 액션 만들기 #26
The head ref may contain hidden characters: "\uCC55\uD1305/\uC774\uC720\uD76C"
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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의 장바구니에서 운영하는 특별한 규칙 | ||
- 비즈니스 규칙에서 장바구니가 배열인지 알아야 한다면 문제가 된다. | ||
|
||
> 도메인 계층에서 일급 콜렉션을 자주 사용하는데 자료구조에 의존하는 일급콜렉션은 뭐지?!?! | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. OOP 관련된 내용을 많이 공부 하신 것 같네요!! 발표 해주실 때 이런 관점에서 해주시면 재미있을 것 같아요!! |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
좋은 공유 감사합니다!!!