TypeORM과 함께 작동하는 일반 BaseService 생성

이 게시물에서는 TypeORM 작업 시 더 적은 코드 결과를 얻기 위해 기본 도메인 서비스를 생성하는 방법을 보여드리겠습니다.

요구 사항


  • 타자기 지식
  • TypeORM 지식

  • Javascript's Mixin

  • 기본 서비스 설계




    import { EntityTarget, Repository, DataSource } from 'typeorm';
    
    export const BaseDomainService = <T>(entity: EntityTarget<T>) => {
      class DomainServiceMixin {
         protected repository: Repository<T>;
    
         constructor(ds: DataSource) {
           this.repository = ds.getRepository(entity);
         }
      };
    
      return DomainServiceMixin;
    }
    


    tsconfig.json이 켜지지 않는지 확인하십시오declaration 옵션.

    도메인에서 상속



    예를 들어 소스에 사용자 및 게시물 도메인이 있으므로 아래 설명과 같이 각 도메인에 대한 서비스를 간단하게 만들 수 있습니다.

    사용자 서비스




    import { BaseDomainService } from 'basedomainservicepath';
    import { User } from 'typeorm user entity paths';
    
    export class UserService extends BaseDomainService(User) {
        async getAllUser(): Promise<User[]> {
           return await this.repository.find();
        }
    
        //...
    }
    


    우편 서비스




    import { BaseDomainService } from 'basedomainservicepath';
    import { Post } from 'typeorm post entity paths';
    
    export class PostService extends BaseDomainService(Post) {
        async deletePostById(id: number): Promise<boolean> {
           const result = await this.repository.delete(id);
    
           return !!result.affected;
        }
    
        //...
    }
    


    결론



    이러한 방식으로 기본 서비스를 구현하면 각 도메인 서비스에 대한 구현 구조 반복을 방지할 수 있습니다.

    다음 게시물에서는 awilix , tsyringe 등과 같은 다른 DI 패키지와 함께 사용하는 방법을 보여 드리겠습니다.

    좋은 웹페이지 즐겨찾기