[Toy Project] DRY 원칙 지키기 위한 CommonService 생성

최지나·2023년 12월 26일
4

DRY원칙이란?

Don't Repeat Yourself, 중복을 최소화하여 소프트웨어의 유지보수성을 향상시키는 핵심 원칙. 코드의 중복을 줄이고 유지보수성을 향상시킴

배경 및 코드

  • 매장 제품의 판매 이력, 매장 제품 관련 API들을 생성하다보니
- 매장 존재하는지 확인
- 제품 존재하는지 확인
- 매장의 제품 존재하는지 확인
  • 위와 같은 내용을 반복적으로 확인해야만 했다. 이에 같은 코드가 중복되었고, 유지보수성 향상을 위해 그리고 DRY 원칙을 따르기 위해 공통적인 로직을 CommonService로 추출하는 리팩토링을 진행하였다
Base Class: CommonService
  - extends: ProductService
  - extends: StoreService
  - extends: StoreProductService
  - extends: SalesHistoryService
  :
  • extends 키워드로 상속받은 class에서 CommonService의 메서드들을 호출해서 사용하게 하였다
@Service
public class CommonService {

  @Autowired
  private CategoryRepository categoryRepository;

  @Autowired
  private StoreRepository storeRepository;

  @Autowired
  private ProductRepository productRepository;

  @Autowired
  private StoreProductRepository storeProductRepository;

  protected Store findStoreByCode(String storeCode) {
    Store store = storeRepository.findByStoreCode(storeCode);
    if (store == null) {
      throw new ResponseStatusException(
        HttpStatus.NOT_FOUND,
        "STORE NOT FOUND"
      );
    }
    return store;
  }

  protected Product findProductByCode(String productCode) {
    Product product = productRepository.findByProductCode(productCode);
    if (product == null) {
      throw new ResponseStatusException(
        HttpStatus.NOT_FOUND,
        "PRODUCT NOT FOUND"
      );
    }
    return product;
  }
  
  // 추가 메서드
@Service
public class SalesHistoryService extends CommonService {

  @Autowired
  private StoreProductRepository storeProductRepository;

  @Autowired
  private SalesHistoryRepository salesHistoryRepository;

  public void registerSalesHistory(
    String storeCode,
    String productCode,
    SalesHistoryInput salesHistoryInput
  ) {
    Store store = findStoreByCode(storeCode);
    Product product = findProductByCode(productCode);
    StoreProduct previousStoreProduct = findStoreProduct(store, product);

      // 추가 서비스로직

결론

  • CommonService에 몇 개의 메서드를 추출해서 간단히 리팩토링 했을 뿐인데 코드 반복이 훨씬 줄고 깔끔해졌다,,!
  • 리팩토링은 귀찮아하지 말고 반복되는 로직을 발견했을 때 바로바로 진행해야겠다 🌟

profile
의견 나누는 것을 좋아합니다 ლ(・ヮ・ლ)

2개의 댓글

comment-user-thumbnail
2023년 12월 26일

멋진 리팩토링이에요!

1개의 답글