program tip

Windows Forms 애플리케이션에서 MVC를 어떻게 구현 하시겠습니까?

radiobox 2020. 11. 21. 14:16
반응형

Windows Forms 애플리케이션에서 MVC를 어떻게 구현 하시겠습니까?


데스크톱 / Windows Forms 응용 프로그램을 너무 많이 개발하지는 않지만 Windows Forms .NET 개발에 MVC (Model View Controller) 패턴을 사용하면 이점이있을 수 있다는 생각이 들었습니다.

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


내가 과거에 한 것은 Model-View-Presenter 비슷한 것을 사용하는 것 입니다.

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

양식은보기이며 IView 인터페이스가 있습니다. 모든 처리는 강의 인 발표자에서 이루어집니다. 양식은 새 발표자를 만들고 발표자의 IView로 자신을 전달합니다. 이러한 방식으로 테스트하면 가짜 IView를 대신 전달한 다음 발표자로부터 명령을 보내고 결과를 감지 할 수 있습니다.

본격적인 Model-View-Controller를 사용한다면 다음과 같이 할 것입니다.

  • 형태는 보기 입니다. 모델에 명령을 보내고 컨트롤러가 구독 할 수있는 이벤트를 발생시키고 모델의 이벤트를 구독합니다.
  • 컨트롤러는 뷰의 이벤트를 구독하고 뷰와 모델에 명령을 전송하는 클래스입니다.
  • 모델은 뷰에 가입하는 것이 이벤트를 발생시킵니다.

이것은 고전적인 MVC 다이어그램에 적합 합니다 . 가장 큰 단점은 이벤트를 사용하면 누가 무엇을 구독하는지 알기가 어려울 수 있다는 것입니다. MVP 패턴은 이벤트 대신 메서드를 사용합니다 (적어도 제가 구현 한 방식). 폼 / 뷰가 이벤트 (예 : someButton.Click)를 발생 시키면 폼은 단순히 프레젠터의 메서드를 호출하여 논리를 실행합니다. 뷰와 모델은 전혀 직접적인 연결이 없습니다. 둘 다 발표자를 거쳐야합니다.


실제로 Windows Forms는 MVC의 "자유 스타일"버전을 구현합니다. 마치 일부 영화가 일부 고전 서적의 엉뚱한 "자유 스타일"해석을 구현하는 것처럼 (Romeo와 Juliet이 떠 오릅니다).

Windows Forms의 구현이 나쁘다는 것이 아닙니다. 단지 ... 다릅니다.

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

  1. ORM / OOP 인프라는 모델입니다.
  2. 양식은보기입니다.
  3. 이벤트 핸들러는 컨트롤러입니다.

View와 Controller가 모두 동일한 객체로 표현되면 코드를 표현에서 분리하는 것이 더 어려워집니다 (Microsoft.Windows.Forms.Form에서 파생 된 클래스에 "GTK + 뷰"를 플러그인하는 쉬운 방법은 없습니다).

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


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

첫째, MVC 구현을 롤링 할 수 있습니다.

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

첫 번째는 시작하기가 간단하지만, 더 멀리 갈수록 더 복잡해집니다. Windows Forms와 함께 작동하도록 설계된 좋은 기존의 잘 테스트 된 MVC 프레임 워크를 찾는 것이 좋습니다. 이 블로그 게시물 이 적절한 출발점 이라고 생각 합니다 .

시작하는 사람이라면 Windows Forms를 건너 뛰고 옵션이있는 경우 WPF에 대해 개발하는 것이 좋습니다. UI를 만드는 데 훨씬 더 나은 프레임 워크입니다. 포함 WPF 개발되고 많은 MVC 프레임 워크가 있습니다 이 하나하나가 .


Microsoft에 따르면 @jasonbunting에서 언급 한 UIP 응용 프로그램 블록은 "보관"되어 있습니다. 대신, WinForms 및 WPF SmartParts를 모두 지원 하는 Smart Client Application Block 또는 더 새로운 Smart Client Software Factory를 살펴보십시오 .


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

"UIP 애플리케이션 블록은 MVC (model-view-controller) 패턴을 기반으로합니다."


Windows 양식에서 모델보기 프레젠터 패턴을 구현하는 과정을 안내하는 몇 가지 지침과 클래스가있는 MS 패턴 및 사례 스마트 클라이언트 애플리케이션 블록을 살펴보십시오. 포함 된 참조 애플리케이션을 살펴보십시오.

WPF의 경우 이것은 프리즘 프로젝트 로 대체됩니다.

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

참고 URL : https://stackoverflow.com/questions/122388/how-would-you-implement-mvc-in-a-windows-forms-application

반응형