Windows Forms에서 MVC 패턴을 완전히 구현하는 방법에 대한 좋은 예는 어디에서 찾을 수 있습니까?
다양한 사이트 (예 : The Code Project 및 .NetHeaven) 에서 많은 자습서와 코드 예제를 찾았 지만 MVC보다 관찰자 패턴을 더 잘 대표합니다. 내가 개발하려는 응용 프로그램이 학교 프로젝트 용이므로 PureMVC 또는 MVC # 와 같은 프레임 워크를 사용하는 것을 꺼립니다 .
Windows Forms에서 MVC 패턴을 완전히 구현하는 방법에 대한 좋은 예는 어디에서 찾을 수 있습니까?
다양한 사이트 (예 : The Code Project 및 .NetHeaven) 에서 많은 자습서와 코드 예제를 찾았 지만 MVC보다 관찰자 패턴을 더 잘 대표합니다. 내가 개발하려는 응용 프로그램이 학교 프로젝트 용이므로 PureMVC 또는 MVC # 와 같은 프레임 워크를 사용하는 것을 꺼립니다 .
답변:
나는 응용 프로그램이 서로 매우 다르고 응용 프로그램 작성 방법에 대한 이해가 여전히 매우 제한적이라는 견해를 가지고 있습니다. 이전에 작업 한 Windows Forms 응용 프로그램은 서로 너무 달랐습니다. 내가 본 디자인 차이 중 일부는 다음과 같습니다 (대부분의 조합 포함).
따라서 항상 잘 맞는 MVC (또는 MVP) 구현을 하나만 만드는 것은 불가능하다고 생각합니다.
내가 본 가장 좋은 게시물은 정말 설명 과 MVC를 왜 MVC 시스템이이 방법을 구축되면, 인 제레미 D 밀러 "자신의 CAB 빌드"시리즈 . 그래도 작업 한 후에는 옵션을 훨씬 더 잘 이해할 수있을 것입니다. Microsoft의 Smart Client Guidance (CAB / Microsoft Composite Application Block) 도 고려해야합니다. 약간 복잡하지만 잘 맞는 응용 프로그램에 적합합니다.
Winforms 프로젝트를위한 MVC / MVP 구현을 선택하면 읽을 가치가있는 개요가 제공됩니다. 많은 사람들이 PureMVC를 좋아 합니다. 나는 그것을 사용한 적이 없지만 다음에 MVC 프레임 워크가 필요할 때 그것을 볼 것입니다.
" Presenter First "는 MVP (Model View Presenter) 디자인 패턴과 테스트 주도 개발 의 아이디어를 결합한 소프트웨어 개발 접근 방식입니다 . 고객의 언어로 테스트를 작성하여 시작할 수 있습니다. 예를 들면 :
" '저장'버튼을 클릭하면 파일이 저장되고 저장되지 않은 파일 경고가 사라집니다."
"Presenter First"를 사용한 경험은 없지만 기회가있을 때 시도해 보겠습니다. 매우 유망 해 보입니다.
다른 Stack Overflow 질문은 여기 와 여기에 있습니다 .
언제든 WPF 를 사용할 생각이라면 MVVM (Model-View ViewModel) 패턴을 살펴보십시오 . 다음은 주목 해야 할 매우 좋은 비디오입니다 : Model-View-ViewModel의 Jason Dolinger .
Winforms 용 MVVM (모델보기보기 모델) 디자인 패턴은 필요한 경우 WPF로 쉽게 변환 할 수있는 또 다른 옵션을 제공합니다. Magical.Trevor 는 속성 이름을 기반으로하는 자동 바인딩도 포함하는 Windows Forms 용 또 다른 MVVM 샘플입니다.
또한 MVC를 사용하는 이유 를 자문 해보십시오 .
목표가 명확 해지면 하나의 구현 또는 다른 구현을 선택하기가 더 쉬워집니다.
업데이트 : 아래의 이전 답변 외에도 "발표자 우선"접근 방식 (특히 PDF 기사)에 대해 읽어 볼 것을 제안 합니다.
MVC 대신 MVP (실제로 PassiveView 패턴)를 권장합니다. 이를 위해 특별한 프레임 워크가 필요하지 않습니다. 코드를 구성하는 방법입니다.
한 가지 접근 방식 (일반적으로 사용)은 각 창 양식을 세 개의 항목으로 분할하는 것입니다.
예제 코드 (단순한 의사 코드, 설명 용) :
interface IView
{
string Username { get; set; }
string Password { get; set; }
event EventHandler LogOnButtonClicked;
void InformUserLogOnFailed();
void MoveToMainScreen();
}
class Presenter
{
public Presenter(IView view)
{
this.view = view;
view.LogOnButtonClicked += new EventHandler(OnLogOnButton);
}
private void OnLogOnButton()
{
// we ask some service to verify the username/password
bool isLogOnOk = logOnService.IsUserAndPasswordOk(view.Username, view.Password);
if (isLogOnOk)
view.MoveToMainScreen();
else
{
view.Username = "";
view.Password = "";
view.InformUserLogOnFailed();
}
}
private IView view;
}
class Form : IView
{
public Form()
{
presenter = new Presenter(this);
}
public string Username
{
get { return TextBoxUsername.Text; }
set { TextBoxUsername.Text = value; }
}
public string Password
{
get { return TextBoxPassword.Text; }
set { TextBoxPassword.Text = value; }
}
public void InformUserLogOnFailed()
{
MessageBox.Show("Invalid username or password.");
}
public void MoveToMainScreen()
{
// code for opening another form...
}
private Presenter presenter;
}
PureMVC를 보셨습니까 ? 특정 구현을 구축하기 시작하면 MVC가 실제로 어떻게 보이는지 아무도 동의 할 수 없다는 것을 알게되었습니다.
업데이트 : MobileMVC 와 같은 더 간단한 것으로 시작하여 직접 빌드 할 수 있습니다 . Compact Framework 코드는 Windows에서 정상적으로 컴파일 / 실행되어야합니다. 이것은 학교 과제이기 때문에 실제로 MVC가 실제로 어떻게 작동하는지 배우는 데 시간을 할애하는 것이 좋습니다.