2009-05-14 5 views
2

WINFORMS 용 MVP 패턴을 구현하려고합니다. 단추 및 그리드 용, 버튼 클릭시, 그리드가로드되고 사용자가 그리드에 값을 입력 할 수 있습니다. 내 버튼 클릭 이벤트에 대한 Winforms MVP Grid Events 문제

, 나는 이런 일이 :

_presenter.LoadGrid를();

간단하고 간단합니다.

제 질문은 그리드와 관련하여 ... 그리드의 특정 열/행에 대한 후속 입력 필드를 활성화/비활성화하기 위해 행 클릭 이벤트 발생을 계획하고 있습니다.

발표자가 GUI 요소를 포함해서는 안되며 View (양식)에 실제로 Logic이 포함되어서는 안된다는 것을 알고 있습니다.

그래서 GridRowClick 이벤트가 발생하려면 비즈니스 규칙 (Logic)을 기반으로 그리드 (GUI)를 조작해야합니다. 발표자가 해당 클릭 이벤트의 논리 또는 양식을 처리하도록하는 사이에는 길을 잃은 것입니까?

발표자가 click 이벤트를 처리하려면 gui 구성 요소가 포함되어 있지 않습니까? 보기가 click 이벤트를 처리하기위한 것이라면 필드 이름 등은 모두 비즈니스 주도 (로직)이며 비즈니스 계층에서 반환 된 데이터 테이블을 기반으로 동적 바인딩됩니다.

모든 조언을 주시면 감사하겠습니다.

건배

답변

1

(적어도) MVP의 두 가지 변종. 그 이름이 암시 하듯

  • 수동보기 패턴
  • 는 컨트롤러 패턴

수동보기 감독, 사용자와 애플리케이션 사이에 더 많거나 적은 수동 인터페이스로 UI를 취급한다.가능한 한 많은 테스트 가능한 코드를 발표자에게 이동시켜보기가 가장 기본적인 UI 업데이트 만 처리하도록합니다.

감독 컨트롤러는보기가 데이터 동기화를 처리하도록함으로써 좀 더 책임감을 부여합니다. 이는 대개 데이터 바인딩을 통해 수행됩니다. 어느 경우 이벤트 처리에

는 발표자 방법에 위임하여 수행됩니다 :

이벤트를 처리하는 형태로 변경이 필요한 경우, 당신은 속성으로 갱신 될 필요가 무엇인지에 노출
EventHandler() 
{ 
    presenter.HandleEvent(); 
} 

:

public string PropertyThatNeedsToBeUpdated 
{ 
    get 
    { 
     return Control.Property; 
    } 
    set 
    { 
     Control.Property = value; 
    } 
} 

수동보기의 경우 그리드가 장애물입니다. 이러한 복잡성으로 인해 가능한 모든 이벤트를 캡처하는 것이 번거로 롭습니다. 감독 컨트롤러를 사용하면 데이터 바인딩 컨트롤까지 데이터 동기화를 남겨두기 때문에 그리드가 훨씬 쉽습니다.

귀하의 상황에 더 적합한 판단을 내려야합니다.

0

의 핵심은 검증의 발표자로 모든 비즈니스 로직을 받고있다.

뷰는 필요한 정보 (예 : 클릭 한 행과 관련된 데이터)를 전달하여 비즈니스 논리를 수행하도록 발표자를 호출해야합니다.

발표자는 비즈니스 논리를 수행하고 데이터를 업데이트합니다.

변경해야하는 유형에 따라 기존 데이터 바인딩으로보기를 자동으로 업데이트하기에 충분할 수 있으므로 수행해야하는 모든 작업이 필요할 수 있습니다. 충분하지 않은 경우 발표자는 필요한 변경을 수행하기 위해 뷰를 한 번 이상 호출 할 수 있습니다 (인터페이스를 통해).

당신이 말했듯이, 당신은보기에 중요한 코드의 양을 최소화하는 것을 목표로해야하며, 특히보기에는 비즈니스 로직이 없어야합니다.

편집 :

여기 MVP 및 기타 프리젠 테이션 패턴에 좋은 일반적인 정보 : http://martinfowler.com/eaaDev/uiArchs.html 있습니다

0

Polymorphic Podcast에서 비디오 시리즈의 Part 4를 확인해보십시오. 그는 감독 컨트롤러 패턴을 사용하고 데이터 그리드를 처리하는 기술을 보여줍니다. 전체 시리즈는 사실 나에게 좋은 소개였습니다.

http://polymorphicpodcast.com/shows/mv-patterns/