저장소에 접근하여 객체를 저장/수정/삭제 하는 일까지 서비스가 하고있다.
Repository : 데이터베이스와 관련된 작업을 처리하며 데이터에 대한 접근을 캡슐화한다.
Service : 비즈니스 로직을 처리하고 애플리케이션의 핵심 기능을 제공한다.
영속 저장에 대한 역할은 모두 리포지토리가 맡게 만든다.
public class QuotationService {
private final QuotationRepository quotationRepository;
public QuotationService() {
quotationRepository = new QuotationRepository();
}
public List<Quotation> findAll() {
return quotationRepository.findAll();
}
public void remove(Quotation quotation) {
quotationRepository.delete(quotation);
}
public Optional<Quotation> findById(long id) {
return quotationRepository.findById(id);
}
public void modify(Quotation quotation, String author, String content) {
quotation.setContent(content);
quotation.setAuthor(author);
quotationRepository.save(quotation);
}
public Quotation write(String author, String content) {
final Quotation quotation = new Quotation(content, author);
quotationRepository.save(quotation);
return quotation;
}
}
modify()
: 객체의 필드 수정은 서비스에서, 수정된 객체를 저장소에 저장하는 것은 리포지토리에서
write()
: 입력받은 String으로 객체를 생성하는 것은 서비스에서, 생성된 객체를 저장소에 저장하는 것은 리포지토리에서
public class QuotationRepository {
private final List<Quotation> quotations;
private long lastQuotationId;
public QuotationRepository() {
quotations = new ArrayList<>();
lastQuotationId = 0;
}
public List<Quotation> findAll() {
return quotations;
}
public void delete(Quotation quotation) {
quotations.remove(quotation);
}
public Optional<Quotation> findById(long id) {
return quotations
.stream()
.filter(_quotation -> _quotation.getId() == id)
.findFirst();
}
public void save(Quotation quotation) {
if(quotation.getId() == null) {
quotation.setId(++lastQuotationId);
quotations.add(quotation);
}
//파일 저장
}
}
아니다.
비즈니스 로직은 서비스에서 처리하고, 그 결과물을 데이터베이스나 다른 영속 저장소에 영속화하는 역할은 리포지토리가 담당하는 것이다.