본문 바로가기
Storify

STORIFY (0123) - 단일 책임 원칙

by Peter.JH 2024. 1. 24.
728x90

1. 도서 read_history DB 생성

 

2. book 제목으로 찾을 시, 일부만 검색해도 나오게 수정

  async findAllBooks(query: any, page: number, limit: number): Promise<Book[]> {
    let findQuery = this.bookModel.find(query);
    if (query.title) {
      const regex = new RegExp(query.title, 'i');
      findQuery = this.bookModel.find({ title: { $regex: regex } });
    }

    return findQuery
      .populate('userId', 'username')
      .sort({ createdAt: -1 })
      .skip((page - 1) * limit)
      .limit(limit)
      .exec();
  }

 

`RegExp(query.title, 'i')` 일부 문자열만 일치하는 책을 찾는 기능을 하는 부분

 

 

3. bookHistory 추가 

서비스 레이어가 비즈니스 로직을 처리하고, 리포지토리 레이어는 단순히 데이터의 조회 및 저장과 같은 DB와의 인터랙션을 담당해야한다. 따라서, createOrUpdateBookHistory에서 확인하는 existingHistory와 같은 로직은 서비스 레이어에서 처리하는 것이 적합하다고 생각해 수정작업을 진행.

 

 

우리가 애플리케이션 신규 사용자입장에서 모델을 바라보게 하여 도메민 모델링 단계에서 유익하다.

사용자 스토리 작성

 

정리

 

1. 도서 읽은 기록 데이터베이스 생성: - 사용자들이 읽은 도서의 기록을 저장하기 위한 새로운 데이터베이스(read_history)를 생성하였습니다.

 

2. 도서 검색 기능 개선: - 'findAllBooks' 함수를 수정하여, 사용자가 도서 제목의 일부만으로도 검색할 수 있게 하였습니다. 이를 위해 정규 표현식을 사용하여 검색 쿼리를 처리하였습니다.

 

3. 도서 읽은 기록 추가 기능 개선: - 'createOrUpdateBookHistory' 함수에서 기존의 도서 읽은 기록 확인 로직을 서비스 레이어로 이동시켰습니다. 이는 서비스 레이어가 비즈니스 로직을 처리하고, 리포지토리 레이어는 데이터의 조회 및 저장 등 데이터베이스와의 인터랙션을 처리하는 것이 좋다는 원칙에 따른 것입니다. 

 

이것은 "계층화 아키텍처 원칙" 또는 "소프트웨어 디자인 원칙"의 일부로, 특히 "단일 책임 원칙(Single Responsibility Principle)"과 관련이 있다. 이 원칙은 각 계층 또는 구성 요소가 자신의 책임을 가지고 있어야 하며, 그 외의 책임은 다른 적절한 계층 또는 구성 요소에게 위임해야 한다는 원칙이다. 서비스 계층은 비즈니스 로직을 처리하는 책임을 가지고, 리포지토리 계층은 데이터의 CRUD(Create, Read, Update, Delete) 연산 즉, 데이터베이스와의 인터랙션을 담당하는 책임을 가진다. 이렇게 각 계층이 자신의 책임에 집중하도록 함으로써 코드의 가독성, 유지보수성, 재사용성을 향상시키는 것이 목표다.

728x90

'Storify' 카테고리의 다른 글

STORIFY (0125) - ObjectId  (0) 2024.01.26
STORIFY (0124) - 사용자 스토리  (0) 2024.01.25
STORIFY (0122) - 종속성 순환 문제, 페이지네이션  (0) 2024.01.23
STORIFY (0119) - API 구조 변경  (0) 2024.01.19
STORIFY (0118) - s3 연결  (0) 2024.01.18