Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Code Review 요청 #286

Open
wants to merge 71 commits into
base: develop
Choose a base branch
from
Open

Code Review 요청 #286

wants to merge 71 commits into from

Conversation

kimminkyeu
Copy link
Collaborator

리팩토링 관련 고민 중심으로 코드리뷰 요청 보내드립니다!

노션 페이지 : https://www.notion.so/Final_-_2-Tech-Pick-a9ff046b8bb741a59f0ee217e21b8596?pvs=4

kimminkyeu and others added 30 commits September 12, 2024 18:00
* feat: backend initial setup

* refactor: .gitignore 수정

* refactor: .env 적용 방법 이미지 수정
* feat : springdoc swagger 의존성 추가

* feat : swagger config 추가
* feat: 기획 변경에 따른 Entity 재정의

* refactor: 서비스 이름 변경에 따라 linkpick으로 수정

* refactor: 리뷰 반영, 불필요한 클래스, 오타 수정, url BLOB 타입으로 지정

* refactor: linkpick -> techpick 변경
* ♻️ refactor: 멀티 모듈을 고려한 디레토리 구조 정리

* ♻️ refactor: 불필요한 디렉토리 제거

* ♻️ refactor: Admin 제거 (User로 통합)

* ♻️ refactor: dummy readme 이동

* ♻️ refactor: 최종 Entity 수정

* ♻️ refactor: 최종 Entity 수정

* ♻️ refactor: url을 Blob에서 varchar로 변경
* ♻️ refactor: 디렉토리 구조 변경

* ♻️ refactor: 디렉토리 구조 추가 및 예시용 코드 작성

* ✨ ApiException

* ♻️ refactor: Class 이름 변경

* ♻️ 예외 코드를 같이 표시 합니다

* ♻️ 예외 코드를 같이 표시 합니다

* ♻️ 스웨거 interface 분리
* feat : security 관련 의존성 추가

* feat : Jwt token provider 구현

* feat : jwt 설정 추가 및 oauth 설정 분리

* feat : jwt 관련 의존성 추가

* feat : cookie 관련 유틸 추가

* feat : jwt 관련 유틸 추가

* feat : thymeleaf 의존성 추가

* feat : oauth2 인증을 위한 메소드 추가

* feat : providerId 필드 추가

* feat : Jwt에 role도 포함되도록 수정

* feat : oauth2 config 설정 yaml

* feat : oauth2 구현

* feat : oauth 로그인 유저 생성을 위한 user 엔티티 수정

* fix : 토큰 유효성 검증 메소드명 수정 : validateToken->isValidToken

* fix : 쿠키 검색 메소드 분리

* fix : 불필요한 주석 삭제

* fix : var -> Object 로 명시적으로 보이게 수정

* fix : 개행 추가

* fix : var -> Object 로 명시적으로 보이게 수정

* fix : User 엔티티 패키지 수정

* fix : 패키지 구조 변경 적용

* fix : User static factory method 파라미터 수정

* feat : OAuth2 exception 및 errorcode 추가
* 🎨 ApiErrorCode 각 기능 별로 분리

* 🎨 ApiOAuth2ErrorCode 추가

* ♻️ chore: 단순 주석 통일 및 개행 제거

* ♻️ chore: 접근 지정자 제한

* ♻️ feat: 핸들러 함수 위임

* ♻️ chore: env 샘플 업데이트

* ♻️ chore: exception abstract 제거, 주석 추가

* ♻️ chore: exception abstract 제거, 주석 추가

* 🐛 fix: servletRequest / Response 받지 않는 것으로 변경 (수형님 리뷰)
* Back/feat/#54 (#55)

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 compose 설정

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 action 설정

* deploy: api 서버 배포 테스트 (#56)

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 compose 설정

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 action 설정

* deploy: api 서버 배포 테스트 (#57)

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 compose 설정

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 action 설정

* deploy: api 서버 배포 테스트 (#58)

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 compose 설정

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 action 설정 (#60)

* deploy test (#61)

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 action 설정

* Update test-server-deploy.yml

* Update test-server-deploy.yml

* Update test-server-deploy.yml

* Update test-server-deploy.yml

* Update test-server-deploy.yml

* 🚀 feat: 배포용 action 설정

* 🚀 feat: 배포용 action 설정

* 🚀 feat: docker compose 내용 변경

* 🚀 feat: github action 환경 변수 분리

* 🚀 feat: github action 환경 변수 분리

* 🚀 feat: github action 환경 변수 분리

* 🚀 feat: github action 환경 변수 분리

* 🚀 feat: github action 환경 변수 분리

* 🚀 feat: github action 환경 변수 분리
* feature: RSS 기능 구현, csv 파일로 초기 데이터 설정, RssRawData column 제약 조건 제거

* refactor: package 구조 변경으로 인해 import 수정

* refactor: 리뷰에 따라 코드 리팩토링
* feat : (임시) favicon 추가

* feat : swagger 경로 설정 추가

* feat : Link exception, error code 추가

* fix : logging 항목 변경

* fix : swagger url 추가

* feat: Link를 가지고있는 pick 확인 메소드 구현

* feat: Link 엔티티 수정 및 정적 메소드 추가

* feat: Link dto 구현

* feat: Link CRUD 구현

* feat: Link swagger 인터페이스 추가

* fix: LinkService 메소드명 명확하게 수정

* fix: LinkService 메소드명 명확하게 수정

* fix: LinkController 리팩토링

* feat: LinkMapper 추가

* refactor: Transactional 어노테이션 추가

* fix: Path 수정

* refactor: LinkProvider 추가
* refactor: 불필요한 클래스 삭제

* refactor: 불필요한 클래스 삭제

* feat: Tag 예외처리 및 에러코드 구현

* refactor: order필드 및 생성 및 삭제를 위한 정적 메소드 추가

* feat: 태그 crud 구현

* feat: 태그 컨트롤러 및 swagger 명세 구현

* feat: (임시) 태그 삭제시 검증을 위한 PickTagRepository 구현

* fix: createTag 메소드에 ApiUserException 추가

* refactor: tag 삭제방식 변경

* refactor: validate 로직 분리 - TagValidator 추가

* refactor: TagRepository 사용하지 않는 메소드 삭제

* refactor: mapper, provider 패키지 구조 변경

* feat: order 중복 에러 추가 및 pick 존재 에러 삭제

* feat: 사용자가 등록한 태그를 map 타입으로 제공하는 메소드 추가

* feat: 중복 order 검증 로직 추가

* refactor: Tag update 로직 수정 - 중복 order 검증, 사용자 태그 검증 로직 변경

* refactor: delete 로직에서 메소드명 typo 수정 및 주석 추가

* refactor: typo 수정

* refactor: tag order 가 음수일때 검증 로직 추가

* refactor: tag order 가 0부터 시작하도록 수정

* refactor: orElse -> orElseGet 으로 리팩토링

* refactor: format refactoring

* refactor: tag update시 검증 로직 변경

* refactor: snake case -> camel case로 리팩토링

* refactor: Tag 엔티티 order 필드명 수정 -> order -> tagOrder

* refactor: userTagList 제공 메소드 정렬기준에 따라 분리 - OrderByTagOrder, OrderByTagId

* refactor: userTagList 제공 메소드 정렬기준에 따라 분리 - OrderByTagOrder, OrderByTagId

* refactor: updateTag 로직 수정 validator에서 update할 tag의 index를 가져옴

* refactor: 불필요한 메소드 삭제

* refactor: TagUpdater 클래스 추가

* refactor: TagUpdater 클래스를 사용해 updateTag 로직 구현

* refactor: format 수정

* refactor: 미사용 메소드 삭제

* refactor: validator 삭제 및 관련 로직 service로 이관

* refactor: 다음 tagOrder 가져오는 메소드 명 명확하게 수정
* test: test용 mysql 분리

* refactor: 테스트용 db가 분리됨에 따라 패키지 구조 변경

* refactor: 테스트용 db가 분리됨에 따라 패키지 구조 변경

* refactor: 개발 db와 테스트 db의 mysql관련 파일 패키지 분리
* refactor: 중복 이름 검증 로직 추가 및 순서,이름 로직를 하나로 묶음

* refactor: 태그 순서 필드명 수정 order -> tagOrder

* refactor: 태그 순서 필드명 수정 order -> tagOrder

* refactor: 태그 수정시 결과 리스트 tagOrder로 오름차순 정렬하여 반환
* refactor: 테스트를 위한 lombok 의존성 추가

* refactor: env 파일 적용

* test: 테스트를 위한 fixture 객체 구현

* refactor: lombok 의존성 변경
* ♻️ refactor: Exception core 패키지를 각 기능별 패키지로 이동

* ♻️ refactor: 시큐리티 - ACCESS_TOKEN_KEY 직접 비교로 수정

* ♻️ refactor: Exception - OAuth 예외도 auth 패키지 안으로 이동

* ✨ feat: API 에러 레벨 구현

* ✨ feat: 에러 코드에 에러 레벨 적용

* ✨ feat: 에러 레벨 별 다른 작동 구현

* ♻️ refactor: dto를 service 패지키로 이동

* ♻️ refactor: api 테스트 서버 설정

* ♻️ refactor: api 테스트 서버 설정

* ♻️ refactor: api 테스트 서버 설정

* ♻️ refactor: api 테스트 서버 설정

* ♻️ refactor: 배포 스크립트에 환경 변수 추가
* feat: Rss 에러 코드, Exception 구현

* refactor: dto 경로 변경에 따라 import 수정, 주석 제거

* feat: rss exception 처리 및 provider로 분리

* refactor: retry 로직 추가, 예외 처리 수정

* refactor: 충돌 해결 및 에러 레벨 추가

* refactor: RssRawData에 RssBlogId 추가, 도커 경로 변경으로 인해 csv 파일 추가
* feat: rss blog url setting 방법 추가, blog url unique 추가, csv 파일에 중복 제거

* feat: sql 파일 도커 경로로 추가
Gyaak and others added 28 commits October 6, 2024 17:12
* feat: root 폴더 조회 로직 구현

* refactor: 업데이트 메소드 분리 (이름/부모폴더)

* refactor: 업데이트 메소드 분리 (이름/부모폴더)

* refactor: 업데이트 메소드 분리 (이름/부모폴더) & 삭제시 휴지통으로 이동되도록 수정

* refactor: 부모 폴더가 삭제되면 자식 폴더/픽도 삭제되도록 @onDelete 추가

* feat: 휴지통에 있지 않은 폴더를 삭제하려 할 때, 발생하는 오류 추가

* feat: 현재 폴더가 어떤 기본폴더에 속해있는지 반환하는 메소드 추가

* feat: 휴지통에 있는 폴더 영구 삭제하는 기능 추가

* refactor: 폴더 이름 변경시에도 구조json 검증

* refactor: 재귀 로직 수정

---------

Co-authored-by: Minky <minkyeki@student.42seoul.kr>
* feat: 로그인 확인용 쿠키(techPickLogin) 구현

* fix: 로그인 확인용 쿠키(techPickLogin)가 access_token을 덮어씌우는 버그 수정
* ♻️ refactor: 테스트 케이스 업데이트

* ♻️ refactor: 미사용 파일 삭제

* ♻️ refactor: 테스트 케이스 업데이트

* ♻️ refactor: 디렉토리를 스트럭쳐로 이름 변경

* ✨ feat: 클라이언트용 구조 노드 DTO

* ✨ feat: 서버용 구조 노드 DTO

* ✨ feat: 파일 위치 이동

* ✨ feat: 파일 위치 이동

* ✨ feat: 클라이언트 전송을 위한 name 데이터 설정 - provider

* ✨ feat: 최종 Structure 완료

* ✨ feat: 최종 Structure 완료

* ✨ feat: 코드 리뷰 바탕으로 한번에 로드하는 메소드 추가
* refactor: 접근권한이 없는 폴더 에러코드 HttpStatus 403으로 변경

* feat: dto 세분화

* refactor: validator 분리

* feat: Structure api에서 사용할 FolderStructureService 분리

* feat: Folder Api 구현

* refactor: FolderStructureService 반환형식 수정

* refactor: updateFolderName 메소드 응답 누락 해결

* refactor: @PathVariable 어노테이션 추가

* refactor: 잘못된 검증 로직 수정
* feat: pick dto 세분화

* refactor: pick update, delete 추가

* feat: Structure 관련된 pick 구현

* feat: pick service 틀 잡기

* refactor: 변수명 수정, 잘못 사용한 메서드 변경
* refactor: 누락된 검증 로직 추가

* refactor: 폴더 생성 로직 변경 parentId는 별도 주입

* refactor: Folder Dto 수정

* refactor: Folder Create 로직 변경 (create->move 한세트로)

* refactor: 불필요한 필드 삭제

* refactor: Structure Json 엔티티 이름 명확하게 변경

* refactor: StructureJson Repository Structure 패키지로 이동

* refactor: Structure API 구현

* refactor: StructureJson 이름 변경

* refactor: FolderCreate 로직 분리

* refactor: PickDeleteDto 분리

* feat: Structure Dto 및 Mapper 구현

* feat: Structure Service 구현

* refactor: Mapper 에 UserRepository 의존성이 추가되면서 임시로 수정

* refactor: ApiDirectory->ApiStructure로 이름 변경

* feat: 회원가입시 자동으로 root,recycle_bin이 빈 폴더구조json 생성

* refactor: model 패키지 이동

* refactor: model 패키지 이동

* refactor: create folder시 무조건 parentId가 null이므로 그에대한 로직 추가

* refactor: model 패키지 이동

* refactor: @RequestBody 추가

* refactor: Structure를 필드로 직접 가지도록 수정

* refactor: 포맷수정

* feat: StructureJsonProvider 구현

* refactor: 불필요한 클래스 삭제

* refactor: StructureJson 업데이트 로직 Provider로 이관

* refactor: Folder 생성자 수정

* refactor: Structure ErrorCode 코드명/주석 수정

* refactor: var 제거

* refactor: 부모폴더가 없을 시 parentFolderId = -1로 응답하도록 수정
* refactor: 불필요한 메소드 삭제 및 Folder 조회 조건 변경(ParentFolder Not Null)

* refactor: 불필요한 메소드 삭제

* refactor: 메소드명 구체화

* refactor: 유저 픽 리스트 조회 메소드 추가

* feat: StructureValidator 구현 및 적용

* refactor: 메소드 이름 명확하게 변경

* feat: 로그 추가

* refactor: 메소드명 통일 IsNotEmpty -> IsNotNull

* refactor: root, recycleBin 정보 요청으로 받지 않고 db에서 받도록 수정
* refactor: access_token 사용하도록 설정

* fix: swagger 쿠키 설정 수정
* ♻️ docker compose 테스트 DB 설정 제거

* ✨ feat: UserService 기능 구현

* ♻️ refactor: Tag Feature 리팩토링 (의존성 제거)

* ♻️ refactor: Pick 도메인 리팩토링

* ♻️ refactor: Structure 도메인 리팩토링

* ♻️ refactor: Link 도메인 리팩토링

* ♻️ refactor: Folder 도메인 리팩토링

* ♻️ refactor: FolderStructure 도메인 리펙토링

* ♻️ refactor: FolderStructure 도메인 리펙토링 (기존 코드 삭제)

* ♻️ refactor: OAuth 도메인 리펙토링

* ♻️ refactor: User 이름 랜덤 생성기 추가

* ♻️ refactor: Folder 예외 추가

* ♻️ refactor: Parser 테스트 주석 처리 (provider 의존성 필요)

* ♻️ refactor: 주석 오류 수정

* ♻️ refactor: 테스트 코드 준비

* ♻️ refactor: 코드 리뷰 피드백 반영

* ♻️ refactor: 코드 리뷰 피드백 반영
* feat: Link Service 기능 추가

* feat: UserProvider 구현

* refactor: TagService 수정

* feat: Pick Service 구현

* feat: Pick Tag 구현

* feat: Pick Api 구현

* refactor: FolderMapper 모두 general 타입으로 들어가는 문제 해결

* feat: folder type 메서드 추가

* refactor: Authentication 제거

* refactor: dto 삭제

* refactor: UserId -> User로 변경 및 메서드명 통일

* refactor: Request Param 변경

* refactor: 리뷰 반영
* feat: Link Service 기능 추가

* feat: UserProvider 구현

* refactor: TagService 수정

* feat: Pick Service 구현

* feat: Pick Tag 구현

* feat: Pick Api 구현

* refactor: FolderMapper 모두 general 타입으로 들어가는 문제 해결

* feat: folder type 메서드 추가

* refactor: Authentication 제거

* refactor: dto 삭제

* refactor: UserId -> User로 변경 및 메서드명 통일

* refactor: Request Param 변경

* refactor: 리뷰 반영

* refactor: valid 수정
* ci:  API V2 브랜치 - 서버 설정
* refactor: v2에 불필요한 패키지 삭제

* refactor: auth폴더 중 새로구현하게되는 부분 삭제

* refactor: 테스트 폴더 삭제
* refactor: TimeTracking -> BaseEntity로 클래스명 변경

* refactor: 불필요한 클래스 삭제

* refactor: 정적 메소드 삭제

* feat: id List <-> String Converter 구현

* feat: 자식 픽/폴더/태그의 순서를 저장하는 필드 추가

* feat: FK 제약조건 제거

* refactor: OnDelete옵션을 위해 FK 제약조건 원복

* refactor: Converter 어노테이션 추가

* refactor: Link 비활성화 구현 및 Pick 관련 필드 추가

* refactor: 필드명 수정 deletedAt -> invalidatedAt

* refactor: FK 제약조건 원복
* feat: mapstruct 의존성 추가

* feat: 초기 프로젝트 구조 설정

* feat: 서비스 / 컨트롤러 어노테이션 추가

* feat: SQL 로그 파일 설정 추가

* feat: 도커 컴포즈 주석 제거

* feat: 잘못 들어간 코드 삭제

* feat: 코드 리뷰 반영
* feat: api 명세

* feat: api 명세

* feat: api 명세 반영

* feat: api 명세 반영
* feat: Link, Pick, Folder 엔티티

* feat: PickTag 엔티티 작업

* chore: 미사용 파일 제거

* chore: 스펙의 변수명 변경

* chore: sql 파일 위치 이동

* chore: 필요 예외 코드 추가

* feat: 유저 infra

* feat: JPA Repository 구현

* ✨ feat: Pick 도메인 구현

* ✨ feat: Pick 인프라 구현

* ✨ feat: Link 인프라 구현

* ✨ feat: Folder 인프라 구현

* ✨ feat: MapStruct 매퍼 구현

* chore: 리팩토링 및 null 처리 추가

* chore: 리팩토링 및 MapStruct 빌드 오류 수정

* chore: 테스트코드 패키지 사라진거 복원

* chore: 테스트코드 준비

* refactor: 현재 사용자 조회 메소드 구현

* chore:  코드 리뷰 결과 반영

* chore:  코드 리뷰 결과 반영

---------

Co-authored-by: PSH <gyak404@gmail.com>
* chore:  코드 리뷰 결과 반영

* chore:  코드 리뷰 결과 반영
* feat: tag infra 구현

* feat: tag entity, repository 구현

* feat: tag dto, mapper 구현

* feat: tag service 구현

* refactor: user tagOrderList에 ArrayList 주입

* feat: tag api request/response 구현

* feat: tag api mapper 구현

* refactor: pickTag 삭제 메서드 구현

* refactor: tag dto 공통화 및 태그 이동 dto 추가

* refactor: 검증 로직 writer로 이동 및 reader 수정

* refactor: 태그 service 리뷰 반영 및 유저의 태그 이동 기능 구현, 태그 삭제 시 픽 태그도 삭제되도록 구현
* fix: Tag 미사용 Exception 제거

* fix: 미사용 Fixture 제거

* fix: Pick Write 예외 처리 추가 (권한)
@kimminkyeu kimminkyeu self-assigned this Oct 21, 2024
public class PickWriterImpl implements PickWriter {
private final PickRepository pickRepository;
private final PickTagRepository pickTagRepository;
private final TagRepository tagRepository;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Q1. 인프라 스트럭처 구현체 코드에서의 검증 로직
어떤 검증이냐에 따라서 어디에 위치할것인가가 다른게 맞을것 같아요. 예를들어서 어떤 값이 비즈니스적으로 올바른 값인지 검증 하는것(ex> 나이는 음수가 될 수 없다)은 당연히 서비스레이어에서 검증이 이뤄져야 할것이구요, 그게 아니라 인프라스트럭처의 관심사의 영역(ex> upsert - update + insert, 이 기능을 위해서 서비스레이어에서 값이 있는지 없는지 체크해서 update or insert를 호출 하는게 아니라, 서비스에서는 단순히 upsert를 호출하고, 인프라스트럭처에서 실제 구현을 담당)이라면 인프라스트럭처에서 해야 하구요. 이걸 구분하는 좋은 방법중 하나는, 사용하는 인프라를 바꿀때 영향이 있을것인가? 를 생각해보는것이에요. 사용하는 인프라를 바꿀때 같이 바뀌어야 하는 부분은 인프라스트럭처에서, 아니라면 비즈니스영역에 구현 해두면 됩니다

@Override
@Transactional
public PickResult saveNewPick(PickCommand.Create command) {
var user = userReader.readCurrentUser();

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Q2. User정보를 파라미터로 받을것인가
자 이 메서드를 테스트를 한다고 가정 해봅시다. 시큐리티로부터 user를 전달 받는 경우, 시큐리티를 Mock으로 만들던지 해야겟죠? 이렇게 되는 코드는 테스트 가용성이 떨어지는 코드라고 말할수 있어요. 반면에 파라미터로 전달받게 된다면 파라미터에서 가짜 user만 만들어서 넣어주면 되는것이죠. 따라서 이 부분은 파라미터로 빼는게 테스트적인 측면에서 더 좋다고 말할수 있어요.

추가적으로, 지금 정의된 기능은 어쨋든 “로그인한 사용자” 에 대해서만 동작하기에 서비스 메서드로 빠질 이유가 없다고 보았습니다. 라고 말씀 해주셨는데, 이 로그인한 사용자라는 관심사는 Controller의 관심사의 영역이지, 서비스영역에서는 로그인한 사용자인지 아닌지에 대해서 관심을 주지 않고, 단순히 사용자를 입력받아 처리한다~ 라고 관심사를 두고 서비스를 만들어야지, 좀 더 확장에 유연한 코드가 됩니다

originalParentFolder.removeChildPickOrder(command.pickId());
var newParentFolder = folderReader.readFolder(user, command.parentFolderId());
newParentFolder.updateChildPickOrder(command.pickId(), command.orderIdx());
pick.updateParentFolder(newParentFolder);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Q3. 비즈니스 로직에 대한 추상화
리팩토링 관련 책중에 파이브 라인스 오브 코드(https://product.kyobobook.co.kr/detail/S000200661796) 라는 책이 있습니다. 이 책에서는 모든 메서드를 5줄 이하로 만들것을 권하고 있죠. 이게 의미하는바가 바로 추상화를 시켜서 메서드를 분리시키라는것 이에요. 이런 5줄 제한 규칙은 너무 극단적인 예시기 때문에 실제로 따르는것을 권하는것 보단 이와 같은 규칙을 하나 두고 리팩토링을 해보면 좋을것 같습니다. 제가 가지고 있는 한가지 규칙은, 이 로직을 모르는 사람이 봣을때 과연 이해할수 있을것인가? 인데요, 이 규칙을 지키기 위해선 상당히 많은 부분을 메서드로 추출해내고 + 적절한 메서드 이름을 줌으로써 이해를 돕게 해야만 합니다. 지금 이 주석 아래의 이부분도 마찬가지인데요, 다른사람이 보기에는 이 주석 없이는 무슨 행동을 하는것인지 이해 할수가 없을겁니다. 하지만 이 부분을 메서드로 추출하고 moveOtherFolder등의 이름을 준다면 주석 없이도 이해할수 있겟죠? 이런 수준의 추상화를 해보는건 어떨까요?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants