在哪里可以找到一个很好的示例,说明如何在Windows窗体中完全实现MVC模式?
我在各个站点(例如,The Code Project和.NetHeaven)上找到了许多教程和代码示例,但是与MVC相比,它们在观察者模式方面更具代表性。由于我要开发的应用程序是用于学校项目的,因此我不愿意使用诸如PureMVC或MVC#之类的框架。
在哪里可以找到一个很好的示例,说明如何在Windows窗体中完全实现MVC模式?
我在各个站点(例如,The Code Project和.NetHeaven)上找到了许多教程和代码示例,但是与MVC相比,它们在观察者模式方面更具代表性。由于我要开发的应用程序是用于学校项目的,因此我不愿意使用诸如PureMVC或MVC#之类的框架。
Answers:
我认为应用程序之间有很大的不同,我们对应如何编写应用程序的理解仍然非常有限。我以前处理过的Windows Forms应用程序彼此之间有很大不同。我看到的一些设计差异是(包括大多数组合):
因此,我认为不可能创建一个始终适合的MVC(或MVP)实现。
我见过的真正能解释 MVC以及为什么要以这种方式构建MVC系统的最佳文章是Jeremy D Miller撰写的“ Build Your Own CAB”系列。工作之后,您应该能够更好地理解您的选择。 还应该考虑Microsoft的智能客户端指南(CAB / Microsoft复合应用程序块)。它有点复杂,但是可以很好地适合于应用程序。
为Winforms项目选择MVC / MVP实现将提供值得阅读的概述。很多人喜欢PureMVC。我从未使用过它,但是下一次我需要MVC框架时会考虑它。
“ Presenter First ”是一种软件开发方法,结合了Model View Presenter(MVP)设计模式和测试驱动开发的思想。它使您可以通过以客户的语言编写测试开始。例如:
“当我单击“保存”按钮时,应保存文件,而未保存的文件警告应消失。”
我没有使用“ Presenter First”的经验,但是如果有机会,我会尝试一下,因为它看起来非常有前途。
如果您想在任何时候使用WPF,请看一下Model-View ViewModel(MVVM)模式。这是一个非常不错的视频,您应该看一下:Model-View-ViewModel上的Jason Dolinger。
Winforms的MVVM(模型视图视图模型)设计模式提供了另一个选项,可以在需要时使其更容易转换为WPF。 Magical.Trevor是Windows窗体的另一个MVVM示例,还包括基于属性名称的自动绑定。
还问自己为什么使用MVC。
一旦确定了目标,选择一种实现或另一种实现就变得更加容易。
更新:除了下面我以前的回答,我建议阅读有关“ Presenter First”方法的信息(尤其是PDF文章)
我建议使用MVP(实际上是PassiveView模式)而不是MVC。您实际上并不需要任何特殊的框架,这只是您组织代码的方式。
一种方法(我通常采用)是将每个Windows窗体分为三个实体:
示例代码(一个简单的伪代码,仅用于说明):
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;
}
Microsoft复合接口应用程序块从MVC实现开始(在其实现的其他模式中)。但是,发行版演变为MVP实现,可以认为这是对MVC概念的一种不同解释。
如果您愿意检查一个非常完整(以及某种程度上复杂)的MVP实现的代码,则可以找到MS-CAB作为Microsoft Smart Client Software Factory的组件之一。它带有源代码。你可以在这里找到它。祝好运!