제니노트

MVC 패턴 - 모델 [C#] 본문

C#/C#

MVC 패턴 - 모델 [C#]

yangjennie 2023. 9. 24. 01:34
반응형

모델에 대해서 살펴보았다.

 

모델은 응용 프로그램에서 사용되는 데이터의 구조를 정의하는 클래스이다.

이 모델은 DB 테이블의 레코드와 일치하거나 응용프로그램 내 사용되는 다른 데이터 요소를 나타낸다.

데이터 모델 클래스는 데이터를 저장, 검색, 수정 및 표시하는 데 사용된다.

 

ASP.NET Core은 웹 응용 프로그램에서 데이터 모델을 정의 할 때, 주로 Plain Old CLR Object(POCO) 패턴 사용.

이 패턴은 데이터 모델 클래스가 최소한의 비즈니스 논리와 데이터 구조만을 가지고 있음을 의미한다.

데이터 모델 클래스는 주로 데이터 속성을 가지며, 이러한 속성은 데이터베이스 열과 매핑될 수 있다.

 

예를 들어 웹 사이트나 앱에서 사용자 정보를 저장하려면 

사용자의 이름, 이메일 주소, 비밀번호 등이 필요할 것이다.

이 때 "사용자 정보"를 나타내는 설계 도면이나 데이터 형태를 만들 수 있다.

이것이 바로 모델이다.

 

이 모델에는 이러한 정보를 담을 수 있는 여러가지 컨테이너가 있을 수 있다. 

이러한 컨테이너를 속성이라고 부르며 각 속성은 특정 종류의 데이터를 저장하는 데 사용된다.

예를 들어 이름 속성은 텍스트를 저장하고 이메일 주소 속성은 이메일 주소 형식을 저장한다.

이렇게 정의된 모델을 사용해서 데이터를 생성, 읽기, 수정 및 삭제가 가능하다.

 

 

 

using System.ComponentModel.DataAnnotations; //데이터 모델에 대한 유효성 검사 및 데이터 주석을 적용하는 데 사용

namespace CoreProjectPrac.Models
{
    public class Address
    {
        [Key]
        public int Id { get; set; } //기본키 
        public string name { get; set; }
        public string City { get; set; }
        public string State { get; set; }  
    }
}

 

 

여기서 유효성 검사란 

데이터가 올바른지 확인하는 과정이다.

예를 들어, 사용자가 이름 필드에 텍스트를 입력해야 하는 경우, 

유효성 검사를 통해 사용자가 빈칸을 남기지 않도록 할 수 있다

데이터 주석이란 c#클래스의 속성에 추가 정보를 주는 것

예를 들어 어떤 속성이 데이터베이스에서 문자열의 최대 길이를 100자로 제한해야 한다면

해당 속성에 [MaxLength(100)]과 같은 데이터 주석을 사용할 수 있다.

 

 

위 코드에서 [Key] 속성 데이터 주석은 CustomerId 속성을 데이터베이스 테이블의 기본키로 지정한다.

이것은 Entity FrameWork 또는 다른 ORM 도구에게 해당 클래스를 사용하여 데이터베이스 테이블을 생성하거나 조회할 때 CustomerId 속성을 기본키로 사용해라고 알려준다.

 

Entity Framework 는 

C# 과 SQL server 간의 데이터를 변환하고 상호작용하는 도구이다.

 

 

 

using System.Diagnostics;

namespace CoreProjectPrac.Models
{
    public class AppUser 
    {

        public int? Pace { get; set; }
        public int? Mileage { get; set; }
        public Address? Address { get; set; }

        public ICollection<Club> Clubs { get; set; }
        public ICollection<Race> Races { get; set; }

    }
}

 

어떤 애플리케이션에서 사용자 정보를 나타낼 때 사용.

int? Pace 는 정수형 데이터를 저장

int? 는 null값을 허용하는 nullable한 정수임을 나타낸다.

이 값이 없으면 null로 표시될 수 있음.

Address 클래스의 객체를 저장. 

다른 Model 폴더에 Address 클래스가 정의되어 있다.

Club 클래스의 객체들을 모아놓은 컬렉션. 사용자가 여러 개의 클럽에 속할 수 있다고 가정할 수 있음.

Race 클래스의 객체들을 모아놓은 컬렉션. 이것또한 사용자가 여러 개의 레이스에 참여할 수 있다고 가정할 수 있음.

ICollection은 여러 개의 항목을 저장하고 관리하는 데 사용된다.  

 

ClubCaterory 라는 열거형 클래스를 만들어 주었다.

열거형은 일련의 명명된 상수 값을 그룹화하는 데이터 형식이다.

namespace CoreProjectPrac.Data.Enum
{
    public enum ClubCategory
    {
        RoadRunner, //도로 러닝
        Womens,//여성
        City, //도시
        Trail, //자연 
        Endurance //지속적 
    }
}

 

ICollection<Club> Clubs 로 사용자가 여러 개의 클럽에 속할 수 있다고 가정한다.

아래도 마찬가지

<Club>은 컬렉션 내부에 저장될 데이터 형식 즉, Club 데이터 형식을 저장하는 컬렉션이다.

 

 

 

 

using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using CoreProjectPrac.Data.Enum;

namespace CoreProjectPrac.Models
{
    public class Club
    {

        [Key]
        public int Id { get; set; } //기본키
        public string? Title { get; set; } //클럽이름 
        public string? Description { get; set; } //클럽속성
        public string? Image { get; set; } //클럽 이미지 파일 경로

        [ForeignKey("Address")]  //Club과 Adress 와의 관계 설정 
        public int? AddressId { get; set; } //Address의 외래키 
        public Address? Address { get; set; } //클럽 주소 정보 
        public ClubCategory ClubCategory { get; set; } //클럽 카테고리
        [ForeignKey("AppUser")] //Club클래스와 ApppUser 와의 관계 설정 
        public string? AppUserId { get; set; } //AppUser의 외래키 
        public AppUser? AppUser { get; set; }
    }
}

Club클래스를 정의한 것.

[Key] 데이터 주석으로 Id 를 클럽의 고유한 식별자, 기본키로 지정했다.

Title 속성은 클럽의 이름, 문자열 형식이고 null을 가질 수 있다.

외래키를 사용했는데 

 

한 테이블의 기본키를 다른 테이블의 열로 참조하는 역할을 하는 거다. 

그니까 다른 테이블의 기본키를 화살표로 가르키는 형태다.

클럽 테이블에서 클럽의 주소 정보를 AddressId 외래키를 이용해서 참조한다.

ClubCategory는 열거형을 사용하여 클럽의 카테고리를 나타낸다. 

AppUser 속성은 해당 클럽과 관련된 사용자를 나타낸다.

[ForignKey] 데이터 주석을 사용하여 AppUserId 속성을 AppUser 클래스와의 외래키로 지정했다.

Club클래스와 AppUser 사용자 간의 관계가 정의 된 것이다.

 

namespace CoreProjectPrac.Data.Enum
{
    public enum RaceCategory
    {

        Marathon, //마라톤 카테고리 
        Ultra, //울트라 마라톤 
        FiveK, //5K 경주 
        TenK, // 10K 
        HalfMarathon //하프 마라톤 
    }
}

 

 

 

반응형

'C# > C#' 카테고리의 다른 글

Controller [C#]  (0) 2023.09.25
Entity Framework 설치 + DB Context [C#]  (0) 2023.09.25
ASP.net? ASP.net core? [C#]  (0) 2023.09.23
Class,Method,클래스 라이브러리 [C#]  (0) 2023.09.23
Generic List , 사용자 정의 클래스 [C#]  (0) 2023.09.23
Comments