[텍스트 게시판] Repository 도입

이다혜·2023년 11월 13일
0

Java 텍스트 게시판

목록 보기
17/17

기존 코드의 문제점

저장소에 접근하여 객체를 저장/수정/삭제 하는 일까지 서비스가 하고있다.

Repository : 데이터베이스와 관련된 작업을 처리하며 데이터에 대한 접근을 캡슐화한다.

Service : 비즈니스 로직을 처리하고 애플리케이션의 핵심 기능을 제공한다.

해결 방법

영속 저장에 대한 역할은 모두 리포지토리가 맡게 만든다.

QuotationService.java

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으로 객체를 생성하는 것은 서비스에서, 생성된 객체를 저장소에 저장하는 것은 리포지토리에서

QuotationRepository.java

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);
        }
        //파일 저장
    }
}

그럼 서비스는 아무것도 안하는 것 아닌가?

아니다.
비즈니스 로직은 서비스에서 처리하고, 그 결과물을 데이터베이스나 다른 영속 저장소에 영속화하는 역할은 리포지토리가 담당하는 것이다.

0개의 댓글