적절한 디커플링 아키텍처를 유지하면서 WinForms에서 깨끗한 UI 기능을 구현하는 가장 좋은 방법은 무엇입니까?


4

상당히 독창적 인 무효 doSomething() 메소드를 사용하여 UI 기능을 구현하는 경향이 있습니다. 즉, 사용자가이 버튼을 누른 다음이 작업을 수행하고이 목록 상자를 사용 가능으로 설정하고 버튼을 사용 불가능하게 설정하는 등의 방법이 가장 좋습니다. 일반 UI 관리에 대한 더 좋은 패턴이 있습니까? 즉, 컨트롤이 활성화/비활성화 된시기 등을 제어하는 ​​방법입니다. 등 사용자 입력에 따라?

종종 '나는 모든 것을하는 큰 클래스'로 방향을 바꾸고있는 것처럼 느껴집니다. 너무 많은 것이 '기본'폼 클래스와 상호 작용하는 것처럼 보입니다. 종종 상대적으로 모듈화 된 디자인을 사용하여 구현 된 클래스의 개인 상태 변수를 포함하는 경우에도 여전히 너무 빨리 성장한다는 것을 알고 있습니다.

사람들은 이러한 트랩에 빠지지 않고 품질, 테스트 가능, 분리 된 WinForms 디자인을 제작하는 데 좋은 조언을 해줄 수 있습니까?

0

난 단지 Form 클래스에서 UI 로직을 넣어 자신의 클래스에서 모든 응용 프로그램 로직을 둘 것 : 별도의 클래스에서 UI의 논리를 넣어하려는 경우

class Form1 : Form 
{ 
    void Button1_Click 
    { 
     Program.DoCommand1(); 
    } 
} 


static class Program 
{ 
    internal static void DoCommand1() {/* ... */} 
} 

12

당신은 MVP을 시도 할 수 있습니다.

마틴 파울러 (Martin Fowler) 또는 마이클 페더스 (Michael Feathers)와 마찬가지로 모델 뷰 발표자에서 UI의 논리는 발표자라는 클래스로 분리되어 있으며 사용자의 모든 입력을 처리하며 "멍청한" 표시 할 수 있습니다. 패턴의 특수한 테스트 가능성은 전체 뷰를 모의 객체로 대체 할 수 있다는 점에서 비롯되며, 이런 방식으로 가장 중요한 부분 인 표현자를 쉽게 단위 테스트 할 수 있습니다.


3

MVP 패턴을 사용하면 winforms에서 꽤 좋습니다.

http://www.objectmentor.com/resources/articles/TheHumbleDialogBox.pdf

  0

0

한 가지 내가 서울시는 최근이 큰 타입 형태의 일부 .NET의 부분 클래스 기능을 십분 활용 한 봐있다. 5 개의 다른 탭이있는 탭 컨트롤이있는 경우. 부분 클래스를 만들고 CardImportMethods.cs, ManageLookupTables.cs 등의 파일 이름을 지정하고 CentralizedForm 클래스의 일부로 남겨 둡니다.

UI 로직만으로도 이러한 고장을 관리하는 것이 이러한 작업을 관리하는 데 도움이되었습니다.