프레임워크 종속을 피하기위한 클라이언트 설계
이종훈
퀴즈
C# GUI 프레임워크 종류
Agenda
프레임워크 마이그레이션 실패
역할을 분리하여 설계하기
의존성 주입
프레임워크 의존성 범위 지정하기
데이터 모델에서 고려할 사항
마지막으로 한가지만 더하면?
시험 관리 프로그램
채점관이 응시자의 제출 답안을 보고 직접 채점하는 기능 페이지
00
마이그레이션 시도 실패 과정
Winform
처음 진입하기 정말 편한 GUI Framework
Winform
처음 진입하기 정말 편한 GUI Framework
WPF
xaml에 대한 학습이 필요하지만 UI/UX 품질에서 더 수월한 개발 가능
프레임워크를 바꾸고 더 UI적으로 좀더 수려한 애플리케이션을 개발하고 싶다.
어려운 원인
라이브러리 의존성
복사 & 붙여넣기로 하는 코드 재사용의 한계점
01
역할을 분리하여 설계
비즈니스 로직 분리
비즈니스 로직 분리
뷰 비하인드에서
채점 로직 처리도 하고,
통신도 하고,
UI 반영도 하고
데이터 모델 클래스
소프트웨어 개발에서 도메인 문제를 해결하거나, 특정 비즈니스 규칙과 프로세스를 구현하는 프로그램의 핵심 로직을 의미합니다.
비즈니스 로직 분리
비즈니스 로직 분리
비즈니스 로직 분리
시험 정보를 가져오는 책임
Http통신 수행이라는 책임
채점을 처리하는 비즈니스 로직
단일 책임 원칙
역할에 따른 분리
(서비스/리포지토리)
채점 대상을 가져오는 역할
어떻게 불러오는 지는 서비스에서 관여하지 않는다.
Http 통신을 통해서 채점 대상을 불러오는 역할
뷰 비하인드에서
채점 로직 처리도 하고,
통신도 하고,
UI 반영도 하고
뷰 비하인드에서 이벤트 받아서 채점 서비스에 전달
채점 서비스
채점 리포지토리
비즈니스 역할 분리
데이터 모델 클래스
데이터 모델 클래스
뷰 비하인드는 그럼 단순해졌을까?
데이터 그리드에서 인덱스 처리하는 로직과, 서비스 호출, 서비스 처리 이후 로직이 뒤섞여 있음.
뷰와 모델사이의 중재
View(사용자 이벤트 전달, 사용자에게 정보 제공)
Presenter(뷰와 모델의 중재)
Model(비즈니스 로직)
View(사용자 이벤트 전달, 사용자에게 정보 제공)
ViewModel
(바인딩 엔진을 통해 뷰와 모델의 중재)
Model(비즈니스 로직)
뷰, 프레젠터로 분리
View
Presenter
뷰 비하인드에서
채점 로직 처리도 하고,
통신도 하고,
UI 반영도 하고
수동 채점뷰
채점 프레젠터
채점 서비스
채점 저장/불러오기
역할 분리
데이터 모델 클래스
데이터 모델 클래스
Repository Layer
Presentation Layer
수동 채점뷰
채점 프레젠터
Business Layer
채점 서비스
채점 저장
Data Model Layer
데이터 모델
02
의존성 주입
객체가 스스로 필요한 의존성을 생성하지 않고, 외부에서 제공받아 사용하는 방식
의존성 주입
의존성 주입
의존성 주입
의존성 주입
의존성 주입
의존성 주입
생성자 주입으로 사용
의존성 주입
인터페이스 호출시 전달해주는 구현체를 지정할 수 있음.
03
프레임워크 의존성 범위 지정
프레임워크 의존성 범위 지정
GUI 프레임워크에서 편하게 쓰라고 준 기능들
Invoke 크로스 스레드 처리 대신 await으로
프레임워크 객체는 Presentation 레이어 안에서
Repository Layer
Presentation Layer
수동 채점뷰
채점 프레젠터
Business Layer
채점 서비스
채점 저장
프레임워크 의존성을 필요로 하는 코드가 여기에 있다면?��
프레임워크 객체는 Presentation 레이어 안에서
Repository Layer
Presentation Layer
수동 채점뷰
채점 프레젠터
Business Layer
채점 서비스
채점 저장
프레임워크 의존성은 여기까지만 사용합시다.
(마이그레이션 해도 재사용 안할 예정)
WinformMessageBox :�IMessageBox
다형성을 이용하기
IMessageBox
Show(string msg);�MessageBox.Show
혹은 인터페이스 계약관계를 통해서 구현체를 다르게 만드는 방법
Show(string msg);
WPFMessageBox :�IMessageBox
Show(string msg);�wpf용 alert 구현
04
데이터 모델에서 유의사항
Winform PictureBox의 Image
Data Model Layer
데이터 모델
WPF Image의 Source
채점 프레젠터
Winform Presentation Layer
Data Model Layer
데이터 모델
WPF Presentation Layer
Observable Object
05
마지막으로 한가지만 더하면?
Repository Layer
Presentation Layer
수동 채점뷰
채점 프레젠터
Business Layer
채점 서비스
채점 저장
Data Model Layer
데이터 모델
Presentation
Domain
Application
(비즈니스 구현)
Infrastructure�(리포지토리)
Entity Data Model
IRepository
BootStrap�(실행 / 의존성주입)
UseCase
마무리
행사 홍보
Flutter In Production
Extended Incheon
인천 유유기지 동구청년21
1월 18일 토요일