문제

너무 많은 데스크탑 / Windows Forms 응용 프로그램을 개발하지는 않지만 Windows Forms .NET Development에 MVC (Model View Controller) 패턴을 사용하는 데 약간의 이점이있을 수 있습니다.

Windows 양식에서 MVC를 구현 한 사람이 있습니까? 그렇다면 디자인에 대한 팁이 있습니까?

도움이 되었습니까?

해결책

내가 과거에 한 일은 비슷한 것을 사용하는 것입니다. 모델-뷰-프리 센터.

참고 :이 기사는 웹에서 사용할 수있었습니다. 지금 확인하려면 CHM을 다운로드 한 다음 파일 속성을보고 차단 해제를 클릭해야합니다. 그런 다음 CHM을 열고 기사를 찾을 수 있습니다. MICROSOFT 감사합니다! 한숨을 쉬다]

양식은보기이며 IView 인터페이스가 있습니다. 모든 처리는 발표자에서 발생하는데, 이는 단지 수업 일뿐입니다. 양식은 새로운 발표자를 생성하고 발표자의 iview로 전달됩니다. 이 방법으로 테스트하기 위해 대신 가짜 iview를 전달한 다음 발표자로부터 명령을 보내고 결과를 감지 할 수 있습니다.

본격적인 모델 뷰 컨트롤러를 사용한다면 이런 식으로 할 것 같아요.

  • 양식은 보다. 모델에 명령을 보내고 컨트롤러가 구독 할 수있는 이벤트를 제기하고 모델의 이벤트를 구독합니다.
  • 그만큼 제어 장치 View의 이벤트에 가입하고 뷰와 모델에 명령을 보내는 클래스입니다.
  • 그만큼 모델 View가 가입 한 이벤트를 제기합니다.

이것은 함께 할 것입니다 클래식 MVC 다이어그램. 가장 큰 단점은 이벤트에서 누가 구독하고 있는지 말하기가 어려울 수 있다는 것입니다. MVP 패턴은 이벤트 대신 방법을 사용합니다 (최소한 구현 한 방식). Form/View가 이벤트를 제기하면 (예 : somebutton.click), 양식은 단순히 발표자의 메소드를 호출하여 논리를 실행합니다. 보기와 모델에는 직접적인 연결이 전혀 없습니다. 둘 다 발표자를 통과해야합니다.

다른 팁

글쎄, 실제로 Windows Forms는 일부 영화가 일부 클래식 서적에 대한 엉뚱한 "프리 스타일"해석을 구현하는 것처럼 MVC의 "프리 스타일"버전을 구현합니다 (Romeo & Juliet Come Te Come To Come).

나는 Windows Forms의 구현이 나쁘다고 말하는 것이 아니라 단지 ... 다릅니다.

Windows 양식 및 적절한 OOP 기술을 사용하고 데이터베이스 액세스를위한 EntitySpace와 같은 ORM을 사용하는 경우 다음을 말할 수 있습니다.

  1. ORM/OOP 인프라가 모델입니다
  2. 양식은 견해입니다
  3. 이벤트 처리기는 컨트롤러입니다

동일한 객체로보기와 컨트롤러를 모두 표현하면 표현에서 코드를 분리하는 것이 더 어려워 지지만 (Microsoft.windows.forms.form에서 파생 된 클래스에서 "GTK+보기"를 플러그인하는 방법은 쉽지 않습니다).

당신이 충분히 조심한다면 당신이 할 수있는 일. 양식 코드를 유지하는 것입니다 완전히 이벤트 핸들러에서 GUI 관련 내용 만 작성하여 컨트롤러/모델 코드와 별도로 다른 모든 비즈니스 로직을 별도의 클래스로 작성하십시오. 이 경우 GTK+를 사용하여 다른 뷰 레이어를 작성하려면 GUI 코드 만 다시 작성하면됩니다.

Windows 양식은 MVC를 사용하도록 처음부터 설계되지 않았습니다. 두 가지 옵션이 있습니다.

먼저 MVC의 구현을 출시 할 수 있습니다.

둘째, Windows 양식 용으로 설계된 MVC 프레임 워크를 사용할 수 있습니다.

첫 번째는 시작하기가 간단하지만, 더 많이 얻을수록 더 복잡합니다. Windows 양식에서 작동하도록 설계된 훌륭하고 기존의 잘 테스트 된 MVC 프레임 워크를 찾는 것이 좋습니다. 나는 믿는다 이 블로그 게시물 괜찮은 출발점입니다.

시작하는 사람은 옵션이 있다면 Windows 양식을 건너 뛰고 WPF에 대해 개발하는 것이 좋습니다. UI를 만드는 데 훨씬 더 나은 프레임 워크입니다. WPF를 위해 개발중인 많은 MVC 프레임 워크가 있습니다. 이 하나 그리고 하나.

Microsoft에 따르면 @jasonBunting이 언급 한 UIP 응용 프로그램 블록은 "보관"입니다. 대신, 스마트 클라이언트 응용 프로그램 블록 또는 더 새로운 스마트 클라이언트 소프트웨어 공장, Winforms 및 WPF SmartParts를 모두 지원합니다.

체크인 사용자 인터페이스 프로세스 (UIP) 응용 프로그램 블록. 나는 그것에 대해 많이 모르지만 몇 년 전에 그것을 보았습니다. 최신 버전이있을 수 있습니다.

"UIP 응용 프로그램 블록은 MVC (Model-View-Controller) 패턴을 기반으로합니다."

MS Patterns and Practices Smart Client Application Block을 살펴보십시오. 스마트 클라이언트 응용 프로그램 블록은 Windows 양식에서 모델보기 발표 패턴을 구현하는 몇 가지 지침과 클래스가 있습니다. 포함 된 참조 응용 프로그램을 살펴보십시오.

WPF의 경우 이것은 프리즘 프로젝트

소프트웨어 공장 접근 방식은 모범 사례를 배우는 좋은 방법입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top