상품 서비스 코드

package jpabook.jpashop.service;

import jpabook.jpashop.domain.item.Item;
import jpabook.jpashop.repository.ItemRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class ItemService {

    private final ItemRepository itemRepository;

    @Transactional
    public void saveItem(Item item) {
        itemRepository.save(item);
    }

    public List<Item> findItem() {
        return itemRepository.findAll();
    }

    public Item findOne(Long itemId) {
        return itemRepository.findOne(itemId);
    }
}

상품 서비스는 단순히 상품 리포지토리에 단순히 위임만 하는 클래스입니다.

경우에 따라서 컨트롤에서 리포지토리에 바로 접근을 해서 사용해도 큰 문제는 없습니다. (그래도 주니어라면 서비스를 사용하는게..)

<aside> ❗ Item 의 repository 및 service 와 Member 의 repository 및 서비스 의 SAVE 메서드의 리턴 별로 차이?


save 메서드에서 void를 주거나 id를 준 것은 특별한 의미가 있는 것은 아닙니다.

지난번에 말씀드린 것 처럼 기본적으로 command는 데이터를 수정만 하고, 조회하지 않는 것이 좋습니다.

그래서 가장 좋은 것은 void 타입을 반환하는 것입니다.

그런데 void를 반환하면, 새로운 식별자를 알 수 없으니, 최소한의 반환으로 id 정도만 반환해 준 것입니다.

여기 예제에서는 item을 저장하고 그 결과를 확인 하는 부분이 없어서 그냥 void로 둔 것이고, 저장한 item의 id를 알아야 한다면 최소한 Id 정도는 반환하도록 고치는 것이 좋습니다^^

</aside>

Referece

<이전

다음>