앞서 말씀 드린 MVVM 패턴을 사용해서 프로그램을 작성하려면 

Data, Command, Event 등을 바인딩하는 것에 대한 정의나

반대로 UI에 Notification 하는 방법 등을 구현해야 저희가 원하는 설계대로 동작하게 됩니다.


2019/02/20 - [Software] - 프로그래밍 이야기2 - MVVM 패턴 (Model-View-Viewmodel)



그래서 이번에는 MVVM 패턴, Command 패턴, Module 관리, Event 통신 등 다양한 디자인 패턴과 프레임웍크를 제공해주는

Prism Library 에 대해서 말씀 드리겠습니다.


Prism Library 는 Microsoft patterns & practices Developer Center 에 WPF와 Silverlight 개발 시 개발자 가이드로 제안할 정도로 개발에 필요한 핵심 적인 Design pattern 과 Framework 들이 잘 구현되어져 있는 Library 입니다.

(참고: https://docs.microsoft.com/en-us/previous-versions/msp-n-p/gg406140(v%3dpandp.10))



간단하게 제 개인적인 견해로 핵심적인 기능들을 나열해보면


1. MEF() or Unity() 를 사용한 모듈관리

(Prism 6.3 버전 이 후 MEF 지원 중단 ㅠㅠ)


( 모듈 관리)



2. MVVM Pattern 


( MVVM Pattern )





3. Composing UI


( Composing UI )





4. Event Aggregator 를 사용한 모듈간 통신


Event AggregationEvent Aggregation

( Event Aggregation )


으로 들 수 있습니다.




License 는 훌륭하게도 MIT License 를 따르고 있습니다.

(참고: https://github.com/PrismLibrary/Prism/blob/master/LICENSE )


오픈소스이기 때문에 GiHub 에서 소스코드 및 자세한 정보 확인이 가능합니다.

(GitHub URL: https://github.com/PrismLibrary/Prism)


초기에 공부하시는 분들은 Microsoft 에서 제공해주는 Prism 5 를 다운 받으셔서 포함된 Example(특히 Stock Trader RI Example) 을 가지고 공부하시면 큰 도움을 받을 수 있습니다.


(다운로드 URL: https://www.microsoft.com/en-us/download/details.aspx?id=42537)



현재 Prism 은 7.2 버전 까지 나왔으며, WPF 뿐만아니라 Xamarin.Forms 도 지원하기 때문에 개발하시는데 많은 도움이 될 것으로 생각됩니다.


Prism Library는 Visual Studio NuGet 에서도 다운 받으셔서 사용하실 수도 있습니다.

Posted by 소프트장
,





WPF 로 프로그램 개발을 시작하려면 MVVM 패턴이란 이야기를 들으실 수 있으실 겁니다.

'WPF를 쓰려면 MVVM 패턴으로~' 라는 식으로 말입니다.


하지만 WPF 책을 구매하더라도 MVVM 에 관한 이야기는 없습니다.

MVVM 패턴은 소프트웨어 설계할 때 말하는 Design pattern 의 한 종류로 MVC(Model-View-Controller)나 MVP(Model-View-Presenter) 패턴과 비슷하다고 보시면 됩니다.

(MVC: https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)

(MVP: https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93presenter)


간단하게 말하면 프로그램에 사용되는 Model(Data나 Data관련 로직)과 UI를 뜻하는 View, 그리고 동작을 처리하는 Controller/Presenter/Viewmodel 등으로 구분하여 프로그램을 작성 구현하자 입니다.


사용하는 이유는 이렇게 설계 패턴을 정의함으로써 프로그램 구현 중에 발생되는 모순들을 최소화 하고 코드 재사용성을 높이기 위해 사용한다고 보시면 됩니다.


비슷하지만 다르게 말하는 이유는 서로간의 관계에 대해 느슨한지 끈끈한지 등의 관계 정의 차이들이 있어서 인데 각각의 장단점들이 있고, 개발하는 플랫폼에 따라 많이 사용하는 방법들이 있다고 생각하시면 됩니다.


MVVM은 그 중에서 WPF, SilverLight 에서 많이 사용하는 방식으로 Command 패턴과 데이터 바인딩을 사용하여

View와 Viewmodel 사이의 의존성을 낮춘 패턴입니다.



좀더 쉽게 말하면 View에서 사용되는 Data, Command, Event 가 모두 Viewmodel의 Property 로 Binding 되어 있고, 

View를 구성하는데 필요한 data 들은 Model 이 가지고 있어 

Viewmodel 은 관련된 동작등을 처리하여 Model을 업데이트 후 View에 PropertyChange가 발생되었다는 것을 알려주면 

View가 갱신되는 구조로 되어있다고 생각하시면 됩니다.


View 와 ViewModel 을 느슨하게 연결하고, View 의 역할을 UI에 국한되게 함으로써

디자이너와 개발자간의 바인되는 명만을 약속함으로써 

View(UI)는 Blend 를 사용하여 디자이너가 직접 디자인하고 개발자는 View 부분의 작업을 최소화 하는 아름다운 구조를 제안하였지만, 

디자이너들이 Photoshop/Illustrator가 아닌 Blend를 사용할리가 없기 때문에 

그냥 View 까지 모두 작성하시면 됩니다.


[ Blend for Visual Studio 2017 ]




Posted by 소프트장
,





오늘은 Window 데스크탑 어플리케이션 개발 시 사용되는 WPF(Windows Presentation Foundation) 에 대해서 포스팅 해보겠습니다.


먼저 WPF 는 쉽게 말해서 데스크탑 Window 어플리케이션을 개발하기 위한 UI Framework 라고 생각하시면 됩니다. 

.Net Framework 기반하에 동작 되기 때문에 .Net Framework 만 설치되어 있으면 동작에 문제는 없습니다.

(참고: https://docs.microsoft.com/ko-kr/visualstudio/designers/introduction-to-wpf?view=vs-2017)


가장 큰 장점으론 그래픽 하드웨어를 사용하는 해상도 독립적인 벡터 기반 렌더링 엔진입니다.

해상도 독립 적인 이란 말은 pixel 기반이 아니기 때문에 Window 사이즈를 늘리거나 줄이더라도 Pixel 부족등으로 발생되는 aliasing 같은 현상이 없다는 이야기 입니다.

(참고: https://en.wikipedia.org/wiki/Aliasing)


( Raster(연속된 Pixel) 그래픽과 Vector 그래픽의 차이 )



그리고 WPF 는 UI 디자인을 XAML(Extensible Application Markup Language) 문서를 통해 디자인하는데,

아시는 분들은 아시겠지만 XML(Extensible Markup Language) 에서 A Application 이 추가되어 XAML 이라고 합니다.

XML 과 같은 Tag 형을 이용하는 Markup Language 입니다.

(참고: https://docs.microsoft.com/ko-kr/dotnet/framework/wpf/advanced/xaml-overview-wpf)


즉 태그형식을 사용하여 UI 구조를 작성할 수 있는 언어 입니다.

만약 Visual studio 에서 개발하신다면 툴 자체에서 디자이너를 제공해 주기 때문에 코드 작성 중 바로바로 확인이 가능하며, 또 디자이너의 도구 상자를 통해서 버튼 등의 컨트롤을 배치 할 수 있습니다.

(하지만 하시다 보면 아시겠지만, 그냥 코드를 치시거나 복붙 하시는게 더 편하실 겁니다.)


(Visual studio 상에서 개발 중인 WPF 어플리케이션 - 상단이 디자이너, 아래가 Xaml 코드 입니다.)




Posted by 소프트장
,