IO 및 sorting
지금까지의 코드
// server.go
package main
import (
"encoding/json"
"fmt"
"net/http"
)
// PlayerStore는 선수들에 대한 점수 정보를 저장한다
type PlayerStore interface {
GetPlayerScore(name string) int
RecordWin(name string)
GetLeague() []Player
}
// Player는 이긴 횟수와 함께 이름을 저장한다
type Player struct {
Name string
Wins int
}
// PlayerServer는 사용자 정보를 위한 HTTP 인터페이스이다
type PlayerServer struct {
store PlayerStore
http.Handler
}
const jsonContentType = "application/json"
// NewPlayerServer는 라우팅이 정의된 PlayerServer를 생성한다
func NewPlayerServer(store PlayerStore) *PlayerServer {
p := new(PlayerServer)
p.store = store
router := http.NewServeMux()
router.Handle("/league", http.HandlerFunc(p.leagueHandler))
router.Handle("/players/", http.HandlerFunc(p.playersHandler))
p.Handler = router
return p
}
func (p *PlayerServer) leagueHandler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("content-type", jsonContentType)
json.NewEncoder(w).Encode(p.store.GetLeague())
}
func (p *PlayerServer) playersHandler(w http.ResponseWriter, r *http.Request) {
player := r.URL.Path[len("/players/"):]
switch r.Method {
case http.MethodPost:
p.processWin(w, player)
case http.MethodGet:
p.showScore(w, player)
}
}
func (p *PlayerServer) showScore(w http.ResponseWriter, player string) {
score := p.store.GetPlayerScore(player)
if score == 0 {
w.WriteHeader(http.StatusNotFound)
}
fmt.Fprint(w, score)
}
func (p *PlayerServer) processWin(w http.ResponseWriter, player string) {
p.store.RecordWin(player)
w.WriteHeader(http.StatusAccepted)
}데이터를 저장하기
테스트부터 작성하기
테스트 실행해보기
테스트를 실행할 최소한의 코드를 작성하고 테스트 실패 결과를 확인하기
테스트를 통과하는 최소한의 코드 작성하기
리팩터링 하기
문제 찾기
테스트부터 작성하기
테스트 실행해보기
테스트를 실행할 최소한의 코드를 작성하고 테스트 실패 결과를 확인하기
테스트를 통과하는 최소한의 코드 작성하기
리팩터링 하기
테스트부터 작성하기
테스트 실행해보기
테스트를 실행할 최소한의 코드를 작성하고 테스트 실패 결과를 확인하기
테스트를 통과하는 최소한의 코드 작성하기
리팩터링 하기
테스트부터 작성하기
테스트 실행해보기
테스트를 통과하는 최소한의 코드 작성하기
추가로 리팩터링 하기. 그리고 성능 고려하기
또 다른 문제
테스트부터 작성하기
테스트 실행해보기
테스트를 통과하는 최소한의 코드 작성하기
다른 작은 리팩터링 하기
몇 가지 규칙을 어기진 않았는가? private한 것들을 테스트 했는가? 인터페이스가 없는가?
private 타입 테스트
인터페이스
에러 핸들링
테스트부터 작성하기
테스트 실행해보기
테스트를 통과하는 최소한의 코드 작성하기
리팩터링 하기
정렬하기
테스트부터 작성하기
테스트 실행해보기
테스트를 통과하는 최소한의 코드 작성하기
정리
우리가 다룬 것
위반한 규칙들
우리의 소프트웨어가 도달한 위치
Last updated