WPF : Model

2026. 4. 25. 16:31·FRAMEWORK/WPF

1. Model(Data) 에 대하여

1) Data

  • MVVM 중 Model은 Data 계층에 속하며, MVVM 구조 중 가장 중요한 부분이라고 할 수 있다.
  • Data 는 순수 데이터로만 이루어져있지 않고, 여러 레이어로 분리되어 체계적으로 사용됨.

2) 구분

  • Entity(순수 데이터)
  • Serivce(로직)
  • DataProvider(접근) => Repository
  • DTO(외부 데이터)

2. Entity(순수 데이터)

  • 데이터 그 자체
  • 로직이 없으며, 상태만을 가지는 순수 데이터를 의미함.
public class Product
{
    public string Title { get; set; }
}

3. Service(로직)

  • 데이터를 어떻게 처리할 것인지?
public class KeywordService
{
    public List<string> ExtractTopKeywords(List<string> titles)
    {
        return titles
            .SelectMany(t => t.Split(' '))
            .GroupBy(w => w)
            .OrderByDescending(g => g.Count())
            .Select(g => g.Key)
            .ToList();
    }
}

> 핵심은 데이터를 가지고 계산, 가공을 하는 로직이 들어간다는 것

> LINQ 사용


4. DataProvider(접근) => Repository 

  • 데이터 접근을 위한 객체

1) 인터페이스

public interface IDataProvider
{
    Task<List<string>> GetTitlesAsync();
}

> Title 을 반환하는 메서드를 가진 인터페이스

 

2) 구현(인터페이스 상속)

public class DummyDataProvider : IDataProvider
{
    public Task<List<string>> GetTitlesAsync() => ...
}

> 하드코딩 되어있는 Title 데이터를 반환...

 

public class ApiDataProvider : IDataProvider
{
    public Task<List<string>> GetTitlesAsync() => ...
}

> API 를 통해 얻은 Title 데이터를 반환...

 

3) Reposioty 패턴

  • Reposiotry 패턴은 데이터 접근을 분리하는 기법임.
  • Provider 를 종류별로 정의하고, ViewModel 에서는 데이터를 받기만 하면 됨.
  • 데이터 소스 교체가 굉장히 쉬워지고, 테스트가 쉬워지는 장점이 있음.

< ViewModel >

var titles = await _provider.GetTitlesAsync();

> ViewModel 에서는 위의 provider 들의 종류를 알 필요가 없음.

 


5. DTO(DataTransferObject, 외부 데이터)

  • 외부 데이터는 포맷이 각각 달라, 내부 프로그램과 데이터 구조가 다르다
  • 따라서 그대로 사용할 수는 없고, DTO(변환해야 할 외부 데이터)를 Entity(내부 데이터) 로 변환하는 과정이 필요함.

1) 외부 데이터 형식

{
  "items": [
    { "name": "iphone case", "price": 10 }
  ]
}

 

2) DTO

public class ApiResponse
{
    public List<ItemDto> Items { get; set; }
}

public class ItemDto
{
    public string Name { get; set; }
    public int Price { get; set; }
}

> ApiResponse 형 객체는 외부 데이터 객체라고 할 수 있다.

 

2.1) Entity 변환

public class Product
{
    public string Title { get; set; }
}
var products = response.Items
    .Select(i => new Product { Title = i.Name })
    .ToList();

> 여기서 response 는 ApiResponse형 객체로 외부 데이터 객체임.

> 여기서 products 는 Product형 객체로 내부 데이터 객체임.

> LINQ 사용

'FRAMEWORK > WPF' 카테고리의 다른 글

WPF : ViewModel - DI(의존성 주입)  (0) 2026.04.25
WPF : 타이머 만들기  (0) 2026.04.23
WPF : MVVM(Model - View - ViewModel)  (0) 2026.04.23
WPF : WPF 에 대하여  (0) 2026.04.22
'FRAMEWORK/WPF' 카테고리의 다른 글
  • WPF : ViewModel - DI(의존성 주입)
  • WPF : 타이머 만들기
  • WPF : MVVM(Model - View - ViewModel)
  • WPF : WPF 에 대하여
m_Dev
m_Dev
  • m_Dev
    m_Dev
    m_Dev
  • 전체
    오늘
    어제
    • 분류 전체보기
      • MAIN STUDY
        • 정보보안
        • 빅데이터
        • 정보처리
        • 컴퓨터 구조
        • 기타
      • JOB
        • Study
        • Project
      • LMS 7
        • 개발일지
      • FRAMEWORK
        • Qt
        • MFC
        • Winform
        • WPF
        • MAUI
      • NETWORK
        • Study
        • Assignment
      • PYTHON
        • Set
        • Study
        • Assignment
        • Project
      • C
        • Set
        • Study
        • Assignment
        • Project
      • C++
        • Set
        • Study
        • Assignment
        • Project
      • C#
        • Set
        • Study
        • Assignment
        • Project
      • DATABASE
        • MySQL
        • SQLite
      • IDE
        • VisualStudioCode
        • VisualStudio
        • Pycharm
        • Colab
      • 기타
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
m_Dev
WPF : Model
상단으로

티스토리툴바