 |
|
데이터 계층
이 절에서는 RESTful한 서비스가 재사용할 상위 데이터 계층을 만드는 기존 도메인 객체를 서술한다.
도메인 객체
"본격적으로 시작하자: RESTful한 API 만들기" 부분에서 알아본 것처럼 Acme Racing 측에서는 예전 프로젝트 동안 데이터 계층에 투자했고 새로운 웹 서비스에서도 이 데이터 계층을 재사용해주길 바라고 있다. 물론 이렇게 함으로써 여러분의 일은 훨씬 더 쉬워질 것이다. 간단히 요약하면 데이터 계층은 Race, Runner, Result라는 세 가지 비즈니스 객체로 구성된다. 이것들은 스프링(Spring)과 하이버네이트(Hibernate)에 의해 효과적으로 관리되고 있지만 이 프레임워크는 여러분에겐 가려져 있어 그저 잘 동작하는 JAR 파일 하나만 갖고 있다는 정도만 알면 된다(즉, 여러분이 쉽게 새로 경기를 생성하고 기존 주자를 검색하는 등 그 정도면 된다).
이 비즈니스 객체들은 경기와 주자 인스턴스를 가져오는 일을 상당히 쉽게 해주는 검색 메서드 몇 개를 지원한다. 객체들은 하부 데이터베이스와 지속성을 갖거나 갱신되거나 제거될 수 있다. 이는 각각 save(), update(), remove() 메서드를 통해 이뤄진다.
예를 보자. Race 객체는 일련의 검색 메서드를 지원하며 지속성을 지닌 데이터를 다루기가 쉽다. Race 객체의 API는 Listing 10에 보인 것처럼 직관적이다.
Listing 10. Race의 API
Collection<Race> findAll();
Race findById(long id);
Race findByName(String name);
void create(Race race);
void update(Race race);
void remove(Race race);
|
Race 인스턴스는 Listing 11에 나열한 것처럼 여러 속성을 갖는다.
Listing 11. Race의 속성
private long id;
private String name;
private Date date;
private double distance;
private Set<Runner> participants;
private Set<Result> results;
private String description;
|
Race의 모든 속성은 속성값을 얻어오는 메서드(getter)와 설정하는 메서드(setter)를 통해 접근할 수 있다. 또한 항목들(participants와 results 등)에는 개개 항목에 대한 추가 기능을 지원한다. 따라서 Race 객체에는 Listing 12에 나타낸 것처럼 addParticipant() 메서드를 갖는다.
Listing 12. Race의 addParticipant() 메서드
public void addParticipant(final Runner participant) ;
|
이처럼 도메인 모델을 이용하는 작업은 상당히 쉽다.
|