본문 바로가기

WPF

[WPF] Prism

Bootstrapper

정의

모듈은 독립적으로 개발테스트  옵션 배포   있는 기능 패키지


설명

많은 상황에서는 모듈이 개발되어 다른 팀에 의해 유지됩니다전형적인 프리즘 응용 프로그램은 여러 모듈에서 구축되어 있습니다

모듈은(예를 들어프로파일 관리특정 비즈니스 기능을 설명하며이러한 기능을 구현하는  필요한 모든 서비스  데이터 모델을 캡슐화하는  사용할  있습니다

모듈은 여러 응용 프로그램에서 재사용   있다.(예를 들어로깅  예외 관리 서비스를 위한)일반적인 으용 프로그램 인프라나 서비스를 캡슐화하는데 사용할  있습니다.



  • Prism이란?
    • 풍부하고, 유연한, 그리고 유지 보수가 쉬운 WPF 데스크탑 응용이나 실버라이트 RIAs, Windows Phone 응용을 쉽게 디자인하고 개발 있는 가이드 라인을 제공합니다.
    • 관심사의 분리(Seperation of Concerns) 낮은 결합도(Loose Coupling) 같은 중요한 아키텍처적 디자인 원칙을 포함하는 디자인 패턴을 사용하여, 독립적이면서도 전체 응용 프로그램에 쉽고 이음새 없이 통합할 있는 낮은 결합도의 컴포넌트를 설계하고 개발하는 것을 도와줍니다.
    • 다중 스크린을 사용하거나, 사용자 인터렉션이 많거나, 중요한 표현 계층 비즈니스 로직을 포함한 WPF 혹은 Silverlight 응용을 개발하는 소프트웨어 개발자를 위해 고안 되었습니다.
    • 마이크로소프트가 Composite Application Guidance 2.0 (“Prism 2.0”)을 정식 출시하였다. Prism은 사용자 경험을 중시하는 애플리케이션 개발에 있어서 모듈화와 유연성을 담보할 수 있는 설계 및 개발 방식을 지원하는 오픈 소스 기반 (Ms-PL)의 UI 프레임웍이다. 
    • 비지니스 기능을 모듈화 시켜 별개의 dll로 구현하고 사용자 요구시에 이를 동적으로 로딩하여 쉘 영역에서 기능을 제공할 수 있도록 설계되었고, 모듈들에서 공통적으로 사용하는 기능들은 오른쪽에 서비스로 분리하여 제공하고 있으며 쉘과 모듈 사이에 연결 고리 역할을 하고 있다. 관련된 모듈과 서비스의 기동이나 라이프사이클 관리를 위해서 컨테이너를 사용하고 있는데, Unity Application block이 기본적으로 탑재되어 있고, Spring 등 원하는 다른 컨테이너가 있을 경우 사용할 수 있다. 

 

  • Prism 사용하는가?
    • 유연하고 유지보수가 쉬운 WPF/Silverlight 클라이언트 프로그램을 디자인하고 개발하는 것은 도전적입니다.
    • 지금까지는 View 윈도우로 만들고, ViewModel DataContext 넣는다라는 생각을 하고 있다.

ViewModel 하나 이상 필요하다면 ViewModel안에 ViewModel 넣고 XAML에서 적당히 처리했는데 Prism 이용하면 그럴 필요가 없다.

  • Prism에서는 윈도우 하나를 쉘이라고 부른다. 그리고 쉘의 Content 영역을 하나 이상으로 쪼갠다. Grid 쓰던, DockPanel 쓰던, 쪼갠 하나하나를 Region이라고 부른다.

 

  • 클라이언트 프로그램 개발 문제
    • 보통, 클라이언트 프로그램 개발자들은 몇몇 상당히 약간의 문제에 부딪칩니다. 프로그램 요구사항은 매번 바뀝니다. 비즈니스 기회와 과제는 자체로서 혹은 새로운 사용 가능한 기술 또는 개발 기간 중에 들어오는 고객의 요구사항으로 인해 프로그램의 요구사항이 변경됩니다. 그러므로 개발 기간 동안 유연하면서도 쉽게 수정 가능한 프로그램을 개발하는 것이 중요하니다. 이러한 유형의 유연함을 디자인 하는 것은 매우 어렵습니다.

프로그램의 다른 부분에 영향을 주지 않으면서, 프로그램의 각각의 부분이 독립적으로 개발되고 테스트 있는 아키텍처가 필요합니다.

대부분의 엔터프라이즈 어플리케이션은 이상의 개발자, 심지어 UI 디자이너나 지역화 담당자가 있는 팀이 필요할 정도의 복잡성을 가지고 있습니다. 여러 개발자나 서브 팀들이 독립적으로  프로그램의 다른 부분을 효율적으로 개발하면서도, 프로그램에 통합될 이음새 없이 동작하는 것을 보장할 있는 디자인을 결정하는 것은 매우 중요한 과제입니다.

하나로 집적된 형태로 디자인하고 개발하는 응용들은 유지보수하기 매우 어렵고 비효율적입니다. 여기서 집적된은 컴포넌트들이 매우 밀접하게 결합되어 있고, 각각이 명확히 분리되지 않는 프로그램을 의미합니다. 보통, 이렇게 디자인되고 개발된 프로그램은 개발자의 삶을 힘들게 합니다.

또한 기능을 넣거나, 기존의 기능을 대체하는 것이 어려우며, 버그를 발견하기 어려우며, 테스트하거나 배포하는 것이 어렵습니다. 또한 개발자와 디자이너가 함께 효율적으로 일할 있는데도 영향을 줍니다.

 

  • Composite 접근

이러한 문제점에 대한 효율적인 해결책은 프로그램을 일관된 해결책의 형태를 지닌 프로그램 (Shell) 형태로 쉽게 통합할 있는 약간은 독립적이면서 느슨하게 결합된 개의 컴포넌트로 분리하는 것입니다. 이러한 방법으로 디자인되고 개발된 프로그램은 흔히 복합 응용 프로그램이라고 불립니다.

복합 응용 프로그램은 다음과 같은 장점을 가집니다.

 

  • 각각의 모듈은 서로 다른 사람이나 서브 팀이 개별적으로 개발하고 테스트하고 배포될 있습니다. 쉽게 기능들이 수정되거나 확장될 있기 때문에 응용 프로그램은 쉽게 확장되거나 유지될 있습니다. Composite 접근법을 사용하면 심지어 명이 진행하는 프로젝트에서도 보다 테스트 가능하며 유지보수가 가능한 응용프로그램을 만드는데 도움이 됩니다.
  • 느슨하게 결합된 방법으로 상호작용하는 다양한 모듈들이 제공하는 UI 컴포넌트들이 구성된 쉘을 사용할 있습니다. 이는 UI 기능을 추가 하려는 여러 개발자들 사이에서 발생하는 논쟁을 줄일 있으며, 일관된 형태를 가질 있도록 지원합니다.
  • 로깅이나 인증과 같은 응용 프로그램의 수평적 기능, 응용 프로그램의 구체적인 비즈니스 기능과 같은 수직적 기능 사이의 관심사 분리가 깔끔하게 이루어 있으며, 재사용 가능하게 지원합니다. 또한 쉽게 응용 프로그램 사이의 상호작용과 종속성들을 관리 있도록 지원합니다.
  • 다른 개발자 혹은 서브 팀들이 특정 과업 혹은 관심이나 전문서에 따른 기능의 분화에 집중 있도록 하여, 역할 분리를 유지하는데 도움이 됩니다. 특히, 응용 프로그램의 UI 비즈니스 로직이 깔끔하게 분리될 있도록 지원합니다.

 

복합 응용프로그램은 전반적인 클라이언트 응용 프로그램 시나리오에 적합합니다. 예를 들어, 복합 응용 프로그램은 이질적인 백엔드 시스템 상에서의 풍부한 UX 개발하는데 이상적인 방법입니다.

 


 

 

이러한 형태의 응용 프로그램은, 하나 이상의 전용 모듈로 표현되는 여러 데이터 보관, 서비스, 백엔드 시스템을 바탕으로 확장된 기능 상에서 과업에 초점을 풍부하고 유연한 UX 사용자에게 제공할 있습니다. 응용 프로그램 로직과 UI간의 깔끔한 분리는 응용프로그램이 모든 구성 모듈 전체에 걸쳐 일관이면서도 구분된 외형을 제공할 있습니다.

게다가, 복합 응용 프로그램은 이따금 서로 다른 팀에 의해서 유지되거나 서로에게 밀접하게 통합된 UI상의 컴포넌트가 독립적으로 개발될 유용합니다.

강조된 각각의 영역은 UI상에 구성된 독립 컴포넌트를 의미합니다.


복합 응용프로그램은 UI 동적으로 결합될 있도록 지원한다. 이는 유연한 UX 가져다 준다. 예를 들어, 실행 중에 응용 프로그램에 기능을 동적으로 봍일 있으며, 이는 풍부한 사용자화와 확장성을 가능케 한다.

 

  • 전제조건

Prism 당신이 WPF 대한 경험이 있다는 것을 가정합니다. Prism 중요하게 사용하는 몇몇 중요한 개념들이 있으며, 당신은 그들과 진해져야 합니다.

 

  • XAML(Extensible Application Markup Language): WPF 응용 프로그램에서 UI 정의하거나 초기화를 서술하기 위한 언어입니다.
  • Data Binding: UI요소가 WPF 요소와 데이터에 연결되는 방법입니다.
  • Resources: WPF에서 스타일, 데이터 템플릿, 그리고 제어 템플릿이 만들어 지고 관리되는 방법입니다.
  • Commands: 사용자 행동과 입력이 컨트롤에 연결되는 방법입니다.
  • UserControls: 사용자가 정의한 행동이나 외형을 제공하는 컴포넌트 입니다.
  • Dependency Properties: 데이터 바인딩, routed command, event 지원하는 속성(Property)설정이나 모니터링을 가능케 하는 공용 언어 런타임 속성 시스템에 대한 확장입니다.
  • Behaviors: UI 제어에 쉽게 적용 있는 대화형 기능을 캡슐화 하는 객체입니다.

 

  • Prism 디자인 목표

Prism 풍부하고 유연하고 유지가 쉬운 응용 프로그램 디자인과 개발을 돕기 위해 고안되었습니다. Prism 라이브러리는 관심사 분리나 낮은 결합도와 같은 중요한 아키텍처적 디자인 원칙을 포함하는 디자인 패턴을 구현하였습니다. Prism 라이브러리가 제공하는 디자인 패턴과 기능을 사용하면, 개발자는 전체 응용 프로그램에 쉽고 이음새 없이 통합할 있으면서도 독립적으로 개발되는 낮은 결합도의 컴포넌트를 디자인하고 개발할 있습니다.

Prism 핵심 아키텍처 디자인 원칙인 관심사의 분리와 낮은 결합도를 바탕으로 디자인 되었습니다. 이는 다음의 장점을 가지게 됩니다.

 

  • 재사용: Prism 컴포넌트나 서비스가 하나 이상의 응용 프로그램에 쉽게 개발, 테스트, 통합 있는 컴포넌트를 사용하여 재사용을 가능하게 합니다. 재사용은 종속성 주입을 통해 실행 중에 쉽게 발견하고 통합될 있는 단위 테스트 컴포넌트를 재사용을 통해 컴포넌트 레벨에서 이룰 있으며, 응용 프로그램 레벨에서는 응용 프로그램 전반에서 사용할 있는 응용프로그램 레벨의 기능을 캡슐화한 모듈의 재사용을 통해 이룰 있습니다.
  • 확장성: Prism 컴포넌트 종속성 관리, 실행 모듈 교체, 독립적으로 배포될 있는 모듈들로 분화를 통해 쉽게 확장 가능한 응용 프로그램을 만들 있도록 지원합니다. Prism 라이브러리의 많은 컴포넌트 또한 확장되고 교체될 있습니다.
  • 유연성: Prism 개발하고 통합되는 새로운 기능들이 쉽게 변경될 있도록 지원하여 유연한 응용 프로그램을 개발 있도록 도와줍니다. Prism 응용 프로그램을 대부분 원하는 방향으로 배포하고 소비할 있도록 지원하여, 응용 프로그램이 일반적인 서비스나 컴포넌트를 활용해 개발 있도록 지원합니다.
  • 단위의 개발: Prism 각기 다른 팀에서 개발하고 심지어 독립적으로 응용 프로그램의 각각의 부분을 배포하는 것을 지원합니다. Prism 간에 종속성을 최소하 시켜 각각의 기능 영역(UI 디자이너-비즈니스 로직개발. 핵심 인프라 개발자) 비즈니스 레벨의 기능 영역에 집중할 있게 합니다.
  • 품질: Prism 이미 검증된 일반적인 서비스나 컴포넌트 활용 또는 개발팀이 테스트를 가능하게 하여 품질을 향상시킬 있습니다. 덧붙여, 이미 검증된 디자인 패턴, 디자인 패턴을 아우르는 지침을 제공하여, Prism 개발팀이 인프라의 구현 테스트 대신 응용 프로그램의 요구조건에 집중할 있도록 합니다.

 

 

마지막으로, 소프트웨어 테스팅은 개발 활동 중에 제일 염두 해야 사항이며, 개발 프로세스에 엄격하게 통합되어야 하기 때문에, Prism 당신이 쉽게 테스트 있는 응용 프로그램을 디자인하고 개발 있도록, 다양한 형태의 소프트웨어 테스팅을 광범위하게 지원합니다. Prism 애초에 테스팅을 고려해 개발 했습니다. Micorosoft 보안 표준을 만족하는 여러 엄격한 품질 검증을 만족하며, 이는 여러 OS, 다양한 버전의 Visual Studio, 다양한 프로그래밍 언어에서 정상적으로 동작합니다. 단위 테스트 또한 각각의 check-in 진행되었습니다. Prism 아래에 나열된 품질 검증에 맞추어 테스트 했습니다.

 


 


 


 




 












 



 


'WPF' 카테고리의 다른 글

[WPF] 다른 쓰레드에서 UI 쓰레드 접근하기  (0) 2018.08.09
[WPF] Routed Event  (0) 2018.07.04
[WPF] MVVM  (0) 2018.07.04