NestJS의 깨끗한 구조 디렉터리 구조
다양한 디렉토리 구조
목록 구조가 상당히 고민이죠.NestJS뿐만 아니라 몇 가지 모델을 향상시켜 보려고 합니다.
Rails형
이것은 내가 처음으로 배운 목록 구조다.
├── controllers
│ ├── userController.ts
│ └── chatController.ts
├── services
│ ├── userService.ts
│ └── chatService.ts
├── models
│ ├── user.ts
│ └── chat.ts
└── configs
Rails형 청결 구조
이것은 내가 녹색 구조로 만든 목록 구조를 배웠다.
├── presentations
│ ├── userController.ts
│ └── chatController.ts
├── usecases
│ ├── userService.ts
│ └── chatService.ts
├── domains
│ ├── user
│ │ ├── userRepositoryInterface.ts
│ │ └── userEntity.ts
│ └── chat
│ ├── chatRepositoryInterface.ts
│ └── chatEntity.ts
├── infrastructures
│ ├── sequelize
│ │ └── userRepository.ts
│ └── dynamodb
│ └── chatRepository.ts
└── configs
주역 분할 청결 구조
이 구조는 Rails형의 청결한 구조를 계승하고 메인 영역에서 첫 번째 디렉터리를 구분한다.나는 어떤 보도에서 어떤 회사가 채택한 것을 보았다.관련 도메인 이름은 기본 도메인 디렉토리 아래에 있습니다.예를 들어 채팅 영역 아래에 참가자의 목록 영역을 추가했다.따라서 주요 도메인 이름 본체를
core
로 분리한다.├── chat
│ ├── presentations
│ │ └── chatController.ts
│ ├── usecases
│ │ └── chatService.ts
│ ├── domains
│ │ └── core
│ │ ├── chatRepositoryInterface.ts
│ │ └── chatEntity.ts
│ ├── infrastructures
│ │ └── dynamodb
│ │ └── chatRepository.ts
│ └── configs
└── account
├── presentations
│ └── userController.ts
├── usecases
│ └── userService.ts
├── domains
│ └── core
│ ├── userRepositoryInterface.ts
│ └── userEntity.ts
├── infrastructures
│ └── sequelize
│ └── userRepository.ts
└── configs
모듈형 청결 구조
만약 nestjs에서 청결 구조를 한다면, 나는 바로 이 구조라고 생각한다.폴더 이름은 무심코 지은 것이기 때문에
entity
와infra
등 좋아하는 이름도 괜찮다.├── chat
│ ├── core
│ │ ├── entity
│ │ │ ├── chat.entity.ts
│ │ │ └── chat.repository.interface.ts
│ │ ├── infra
│ │ │ └── chat.repository.dynamodb.ts
│ │ ├── chat.controller.ts
│ │ ├── chat.service.ts
│ │ └── chat.module.ts
│ └── chat.index.module.ts
└── account
├── core
│ ├── entity
│ │ ├── user.entity.ts
│ │ └── user.repository.interface.ts
│ ├── infra
│ │ └── user.repository.sequelize.ts
│ ├── user.controller.ts
│ ├── user.service.ts
│ └── user.module.ts
└── account.index.module.ts
질의 서비스 가져오기
모듈 디렉터리
user.query.service.interface.ts
와 인터페이스에 직접 있습니다.다음infra
디렉터리에 실제 실현user.repository.sequelize.ts
이 나타날 것이다.└── account
├── core
│ ├── entity
│ │ ├── user.entity.ts
│ │ └── user.repository.interface.ts
│ ├── infra
│ │ ├── user.query.service.sequelize.ts
+ │ │ └── user.repository.sequelize.ts
│ ├── user.controller.ts
│ ├── user.service.ts
+ │ ├── user.query.service.interface.ts
│ └── user.module.ts
└── account.index.module.ts
외부 프로그램 라이브러리를 모듈로 가져오려면
nestjs의 방법에 따르면 sequelize와prisma 등 외부 라이브러리는 직접
import
이 아니라 모듈 관리,DI가 사용하고 싶은 서비스입니다.만드는 방법은 두 가지가 있다.숨김 모드 1 라이브러리의 고유 명사.
├── account
│ ├── core
│ │ ├── entity
│ │ │ ├── user.entity.ts
│ │ │ └── user.repository.interface.ts
│ │ ├── infra
│ │ │ └── user.query.service.sequelize.ts
│ │ ├── user.controller.ts
│ │ ├── user.service.ts
│ │ └── user.module.ts
│ └── account.index.module.ts
└── cache
├── infra
│ └── cache.service.redis.ts
├── cache.service.interface.ts
└── cache.module.ts
사용 모드 2 라이브러리의 고유 명사.├── account
│ ├── core
│ │ ├── entity
│ │ │ ├── user.entity.ts
│ │ │ └── user.repository.interface.ts
│ │ ├── infra
│ │ │ └── user.query.service.sequelize.ts
│ │ ├── user.controller.ts
│ │ ├── user.service.ts
│ │ └── user.module.ts
│ └── account.index.module.ts
└── sequelize
├── sequelize.service.ts
└── sequelize.module.ts
모드1은 리디스가 가지고 있는 고속 캐시 작용의 앞에 나타나고 추상화된다.따라서 cache.service.ts
가 아니라cache.service.interface.ts
다.infra
디렉토리에 설치합니다.모드 2는 sequelize 자체를 서비스화합니다.
추상화된 관점에서는 패턴 2보다 패턴 1이 더 추천된다.모드2는 주로 다른 디렉터리
infra
디렉터리에 자주 사용되는 라이브러리에 주입하는 데 사용됩니다.추상화에 관해서는 이 보도에 상세한 해설이 있다.
도메인 이벤트 관련 디렉터리에 들어간 경우
├── account
│ ├── core
│ │ ├── entity
│ │ │ ├── user.entity.ts
│ │ │ └── user.repository.interface.ts
│ │ ├── event
│ │ │ └── account.created.event.ts
│ │ ├── infra
│ │ │ └── user.query.service.sequelize.ts
│ │ ├── user.controller.ts
│ │ ├── user.service.ts
│ │ └── user.module.ts
│ └── account.index.module.ts
├── notification
│ ├── listener
│ │ └── account.created.listener.ts
│ ├── notification.service.ts
│ └── notification.module.ts
└── share
├── baseEvent.ts
└── util.ts
설치는 여기를 참조하세요.Reference
이 문제에 관하여(NestJS의 깨끗한 구조 디렉터리 구조), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/dove/articles/72e66240f09f34텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)