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

Youtube - Clean Architecture : Code Unparalleled #9

Closed
SAgiKPJH opened this issue Apr 10, 2024 · 6 comments
Closed

Youtube - Clean Architecture : Code Unparalleled #9

SAgiKPJH opened this issue Apr 10, 2024 · 6 comments
Assignees

Comments

@SAgiKPJH
Copy link
Contributor

SAgiKPJH commented Apr 10, 2024

@SAgiKPJH SAgiKPJH self-assigned this Apr 10, 2024
@SAgiKPJH
Copy link
Contributor Author

개요

  • 앤터프라이즈 클린아키텍처 구현
  • 새로운 것을 배우면서 오는 절망감을 이해한다.
  • 같이 클린아키텍처 전문가가 되자.
  • 나를 믿어라

@SAgiKPJH
Copy link
Contributor Author

SAgiKPJH commented Apr 10, 2024

1 Clean Architecture Dot Net 6

  • Add Solution f21c3ce
    • ClassLibraly

Domain

Application

  • Add Movie Application e677729
  • Add Application IRepository, Service da71876

Infrastructure

API

1 Result

@SAgiKPJH
Copy link
Contributor Author

SAgiKPJH commented Apr 10, 2024

2 Clean Architecture- Implementing Entity Framework Core

Infrastructure

  • Add EntityFramework 4c772aa
    • Microsoft.EntityFrameworkCore.Tools : for Migration
    • Microsoft.EntityFrameworkCore.SqlServer : for postgre or mongoDB

DBContext

Migration

패키지 관리자 콘솔 : add-migration InitialMigration

패키지 관리자 콘솔 : update-database

  • image

2 Result

@SAgiKPJH
Copy link
Contributor Author

SAgiKPJH commented Apr 11, 2024

3 One-to-Many and Many-to-Many Relationships in Clean Architecture

Database 업데이트 할 때 주의사항

PM> remove-migration
PM> add-migration AddedMoviesRentalMembers

  • 기존의 만들었던 DB 제거
    • image

PM> update-database


3 Result (Add Domains)

@SAgiKPJH
Copy link
Contributor Author

3 예제에 대한 자세한 내용

One to Many, Many to Many

데이터베이스에서의 관계들을 정의할 때, "One to Many"와 "Many to Many"는 매우 중요한 개념입니다. 이러한 관계들은 엔티티 간의 연결 방식을 정의하고, 데이터가 어떻게 관련되어 있는지를 명확히 합니다.

One to Many (1:N)

"One to Many" 관계는 한 엔티티가 다른 엔티티 여러 개와 관계를 가질 수 있음을 의미합니다. 예를 들어, 한 명의 회원(Member)이 여러 번의 대여(Rental)를 할 수 있는 경우입니다. 여기서 회원은 "One" 쪽이고, 대여는 "Many" 쪽입니다.

이 관계를 사용하는 이유는 다음과 같습니다:

  • 데이터의 중복을 방지할 수 있습니다. 예를 들어, 같은 회원이 여러 번의 대여를 하는 경우, 회원 정보를 대여 정보와 분리하여 저장함으로써 회원 정보의 중복 저장을 방지할 수 있습니다.
  • 데이터의 일관성을 유지할 수 있습니다. 회원 정보가 변경되면, 해당 회원의 모든 대여 정보에 대해 일관성을 유지할 수 있습니다.

Many to Many (N:M)

"Many to Many" 관계는 두 엔티티 그룹이 서로를 여러 번 참조할 수 있음을 의미합니다. 예를 들어, 한 번의 대여(Rental)에 여러 편의 영화(Movie)가 포함될 수 있고, 한 편의 영화는 여러 번 대여될 수 있는 경우입니다. 여기서 대여와 영화 모두 "Many" 쪽에 속합니다.

이 관계를 사용하는 이유는 다음과 같습니다:

  • 복잡한 관계를 표현할 수 있습니다. 영화와 대여 사이의 관계처럼, 실세계의 복잡한 관계를 데이터베이스 내에서 표현할 수 있습니다.
  • 유연성을 제공합니다. 여러 영화를 한 번의 대여에 포함시킬 수도 있고, 한 영화를 여러 번의 대여에 포함시킬 수도 있어 다양한 상황에서 데이터를 효율적으로 관리할 수 있습니다.

이러한 관계들은 데이터베이스 설계에서 중요한 역할을 하며, 엔티티 간의 관계를 명확히 하고 데이터의 중복을 방지하며, 데이터 관리의 효율성과 유연성을 높이는 데 도움을 줍니다.

[1] 티스토리 - ManyToOne과 @onetomany로 배우는 JPA 기초 사용법 (https://stir.tistory.com/158)
[2] Learn Microsoft - 일대다 관계 - EF Core (https://learn.microsoft.com/ko-kr/ef/core/modeling/relationships/one-to-many)
[3] velog - JPA - 다대다 연관관계 (https://velog.io/@yuseogi0218/JPA-%EB%8B%A4%EB%8C%80%EB%8B%A4-%EC%97%B0%EA%B4%80%EA%B4%80%EA%B3%84)
[4] TISTORY - [JPA] @manytomany, 다대다[N:M] 관계 - 개발자의 기록습관 (https://ict-nroo.tistory.com/127)



각 함수의 의미

제공된 코드 조각에서 사용된 함수들은 Entity Framework Core (EF Core)의 데이터 모델링을 위한 API를 사용하여 데이터베이스 스키마를 정의하는 데 사용됩니다. 각 함수의 의미는 다음과 같습니다:

OnModelCreating(ModelBuilder modelBuilder)

  • 이 함수는 EF Core에서 모델이 생성될 때 호출되며, 모델을 구성하는 데 사용됩니다. 여기서 모델이란 EF Core가 사용하는 클래스와 데이터베이스 테이블 간의 매핑을 의미합니다. 개발자는 이 함수 내에서 ModelBuilder 인스턴스를 사용하여 엔티티 간의 관계를 정의하고, 키, 인덱스, 테이블 매핑 등을 설정할 수 있습니다.

modelBuilder.Entity<Member>()

  • 이 메서드는 Member 엔티티에 대한 설정을 시작합니다. Entity<T> 메서드는 특정 엔티티 타입 T에 대한 구성을 정의하는 데 사용됩니다. 여기서는 Member 클래스에 대한 설정을 정의할 것입니다.

.HasOne<Rental>(s => s.Rental)

  • HasOne 메서드는 "One to Many" 관계의 "One" 쪽을 정의합니다. 여기서는 Member 엔티티가 하나의 Rental 엔티티를 가질 수 있음을 나타냅니다. s => s.RentalMember 엔티티 내에서 Rental 엔티티를 참조하는 속성을 지정합니다.

.WithMany(r => r.Members)

  • WithMany 메서드는 "One to Many" 관계의 "Many" 쪽을 정의합니다. 이 경우, 하나의 Rental 엔티티가 여러 Member 엔티티와 관련될 수 있음을 의미합니다. r => r.MembersRental 엔티티 내에서 여러 Member 엔티티를 참조하는 컬렉션 속성을 지정합니다.

.HasForeignKey(s => s.RentalId)

  • HasForeignKey 메서드는 외래 키 속성을 정의합니다. 이 경우, Member 엔티티 내의 RentalId 속성이 Rental 엔티티의 기본 키를 참조하는 외래 키로 사용됩니다. 이를 통해 MemberRental 사이의 관계가 연결됩니다.

modelBuilder.Entity<MovieRental>().HasKey(g => new {g.RentalId, g.MovieId});

  • 이 줄은 MovieRental 엔티티에 대한 복합 키를 정의합니다. HasKey 메서드는 엔티티의 기본 키를 정의하는 데 사용됩니다. 여기서는 RentalIdMovieId 속성의 조합으로 복합 키를 구성하여, "Many to Many" 관계를 구현하는 데 사용되는 연결 테이블(MovieRental)의 기본 키를 정의합니다.

이러한 메서드들을 사용하여, EF Core를 통해 데이터베이스의 테이블, 엔티티 간의 관계, 그리고 기타 구성 요소들을 정의하고 관리할 수 있습니다.

@SAgiKPJH
Copy link
Contributor Author

4 Clean Architecture | Adding Dependency Injection to Infrastructure Layer Class Library

Add CelarnArchitecture Infrastructure DI

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

No branches or pull requests

1 participant