12. WeatherApp - Model
01.
01.1
MVVC 패턴은 Model, View, ViewModel 로 소스코드의 역할을 구분해 정한 것 뿐입니다.
언제나 하는 이야기지만, 프로그램은 '데이터'와 '로직' 단 두가지만으로 이루어집니다.
기본 자료형 → 복합 자료형 → 사용자 정의 자료형(구조체) → 클래스(구조체 + 함수) > → Model
01.2
좀 더 단순하게 생각합시다.
프로그램은, 데이터와 로직으로 이루어집니다.
Model은 자료형입니다. ViewModel은 로직입니다.
C언어에서, 기본적인 자료형과 로직만으로 프로그램을 구했엇습니다.
Model과 ViewModel 만으로 프로그램을 구현하고, 콘솔에 출력하면 C언어 프로그래밍과 동일한 구현 과정이 됩니다.
다른점은, 콘솔 대신 View라는 UI로 ViewModel의 로직 결과가 출력되는 점입니다.
01.3
두 값의 교환 구조를 구현하는 방법을 기억하시나요?
A, B 라는 두 값을 교환하려면 C라는 임시 공간이 필요하고
A와 B를 연결하는 기술
B와 C를 연결하는 기술
C와 A를 연결하는 기술
이 추가적으로 배워야 하는 점입니다.
MVVC 패턴도 마찬가지 입니다.
Model과 ViewModel을 연결하는 기술
ViewModel과 View를 연결하는 기술
View와 Model을 연결하는 기술
들을 추가적으로 배워야 합니다.
01.4
먼저, API를 통해 가져 올 Json 형태의 데이터를 기준으로 Model을 생성해 봅니다.
02. Model 폴더 추가
02.1
02. Model 폴더에 "City 클래스" 파일 추가
02.1
03. Json 에서 City Class 코드 생성하기
*언제나 하는 이야기지만, 프로그램은 '데이터'와 '로직' 단 두가지만으로 이루어집니다.
기본 자료형 → 복합 자료형 → 사용자 정의 자료형(구조체) → 클래스(구조체 + 함수) > → Model
03.1 AccuWeather API 에서 지역 정보를 검색 결과 API 가져오기
AccuWeather > Location API > 검색 > Json
03.2 Json을 Class로 변환
JSON Utils: Generate C#, VB.Net, SQL TAble and Java from JSON
① 변환 대상 언어를 설정하고
② 클래스 이름을 설정하고
③ Json 코드를 붙여 넣습니다.
④ 변환을 시작하면, ⑤아래에 C# Class Object 코드를 확인 할 수 있습니다.
⑥ Json 에서 변환한 City 클래스 C# 코드를 복사합니다.
⑦ 복사한 코드를 붙여넣습니다.
⑧ Country와 AdministrativeArea 는 중복되는 구조입니다. 제거합니다.
⑨ AdministrativeArea 클래스명을 변경하고, ⑩ 반영합니다.
public class Area
{
public string ID { get; set; }
public string LocalizedName { get; set; }
}
public class City
{
public int Version { get; set; }
public string Key { get; set; }
public string Type { get; set; }
public int Rank { get; set; }
public string LocalizedName { get; set; }
public Area Country { get; set; }
public Area AdministrativeArea { get; set; }
}
04. Json 에서 CurrentCondition Class 코드 생성하기
04.1
"Weather.cs 클래스" 파일도 동일한 과정으로 생성합니다.
04.2
Metric과 Imperial은 중복되는 구조입니다. 제거합니다.
Imperial 클래스명을 Units로 변경하고, 반영합니다.
public class Units
{
public int Value { get; set; }
public string Unit { get; set; }
public int UnitType { get; set; }
}
public class Temperature
{
public Units Metric { get; set; }
public Units Imperial { get; set; }
}
public class CurrentConditions
{
public DateTime LocalObservationDateTime { get; set; }
public int EpochTime { get; set; }
public string WeatherText { get; set; }
public int WeatherIcon { get; set; }
public bool HasPrecipitation { get; set; }
public object PrecipitationType { get; set; }
public bool IsDayTime { get; set; }
public Temperature Temperature { get; set; }
public string MobileLink { get; set; }
public string Link { get; set; }
}
05.