ABOUT ME

Today
Yesterday
Total
  • EF Core - Domain 분리구조 만들기
    .NET/Database 2024. 3. 22. 08:42

    DDD ?

    도메인 소프트웨어로 해결해야 할 비즈니스의 영역 입니다.
    도메인 엔티티 도메인 주도 개발에서 실제 식별 가능한 객체

    EF Entity

    데이터베이스 테이블에 저장되는 데이터의 구조
    즉 테이블을 클래스화 한 것을 EF Entity라고 한다.

    EF Entity를 Domain Entity와 동일하게 사용할 경우의 문제점

    EF 엔티티를 도메인 엔티티로 그대로 사용하는 경우, 다음과 같은 문제가 발생할 수 있습니다:

    1. 도메인의 데이터베이스 의존성 증가: 도메인 엔티티가 EF 엔티티로 구현되면, 데이터베이스의 스키마 변경이 도메인 로직에 직접적인 영향을 미치게 됩니다. 이는 도메인 로직이 데이터베이스 설계에 종속되게 만들어, 도메인 모델의 변경이 불필요하게 자주 일어나게 됩니다.
    2. 데이터베이스 스키마 노출: EF 엔티티가 도메인 엔티티로 사용되면, 도메인 계층이 데이터베이스의 구조를 알아야 하므로, 비즈니스 로직을 개발하는 개발자들이 데이터베이스 스키마에 지나치게 의존하게 됩니다. 이는 비즈니스 로직과 데이터 저장소 간의 분리를 어렵게 만들고, 코드의 유지보수를 복잡하게 만듭니다.

     

    분리된 레이어 구조

    이러한 문제를 해결하기 위해, 도메인 엔티티와 EF 엔티티를 분리하여 설계하는 것이 권장됩니다. 이를 통해 각 계층 간의 결합도를 낮추고, 시스템의 유연성과 유지보수성을 높일 수 있습니다.

    구조적인 접근:

    1. 도메인 엔티티 (Domain Entity): 비즈니스 로직과 비즈니스 규칙을 담고 있는 순수한 객체. 도메인의 개념과 요구사항을 기반으로 설계되며, 데이터베이스나 외부 시스템에 종속되지 않습니다.
    2. EF 엔티티 (EF Entity): 데이터베이스의 테이블에 대응되는 클래스로, 데이터 저장 및 조회 기능을 담당합니다. EF를 사용하여 이 엔티티들은 데이터베이스와 직접적으로 상호작용합니다.
    3. DTO(Data Transfer Object): 데이터 전송 객체는 애플리케이션 레이어 간에 데이터를 전달하기 위해 사용됩니다. 도메인 엔티티와 EF 엔티티 간의 변환 과정에서 주로 사용되며, 외부 API나 서비스와의 통신을 위해 데이터를 포맷팅하는 역할도 합니다.
    4. 매퍼 클래스 (Mapper Class): 도메인 엔티티와 EF 엔티티 간의 변환을 담당하는 클래스입니다. 매퍼 클래스는 양쪽 엔티티 간의 데이터를 변환하여 전달하는 기능을 수행합니다. 이는 도메인 로직과 데이터베이스의 결합도를 낮추는 데 중요한 역할을 합니다

    이렇게 나누어 놨을 경우에는 초기 개발시에는 코드량이 더 늘어나게 됩니다. 하지만 처음에 아무리 잘 만들어 놨다고 하더라도 계속 서비스가 유지되는 프로그램의 경우에는 지속적인 변경이 일어나게 됩니다.

     

    DB와 직결되어있는 ORM레이어의 엔티티 클래스와, 비즈니스로직을 다루는 도메인레이어의 엔티티 클래스가 분리되어있지 않다면, 한쪽이 바꼈을때 의존성이 걸려있는 모든 부분들을 같이 수정해야합니다. 

     

    반면에 도메인 엔티티와 EF 엔티티를 분리하여 설계함으로써, 데이터베이스의 변경이 비즈니스 로직에 미치는 영향을 최소화할 수 있으며, 시스템의 유지보수성을 향상시킬 수 있습니다. 

     

     

Designed by Tistory.