用Windows Forms实现MVC
我在哪里可以找到一个关于如何在Windows Forms中完全实现MVC模式的好例子?
我在各种网站上找到了许多教程和代码示例(例如,Code Project和.NetHeaven),但许多代表观察者模式比MVC更具代表性。 由于我想开发的应用程序是针对学校项目的,因此我不愿意使用PureMVC或MVC#等框架。
我认为应用程序如此不同,我们对如何编写应用程序的理解仍然非常有限。 我曾经工作过的Windows窗体应用程序已经彼此不同。 我看到的一些设计差异(包括大多数组合):
因此,我认为不可能创建一个总是适合的MVC(或MVP)的实现。
我见过的最棒的帖子真正解释了 MVC,以及为什么 MVC系统的构建方式是Jeremy D Miller的“Build Your Own CAB”系列。 工作之后,你应该能够更好地理解你的选择。 也应该考虑微软的智能客户指导(CAB /微软复合应用程序块)。 这有点复杂,但它适用于适合的应用程序。
为Winforms项目选择MVC / MVP实现给出一个值得阅读的概述。 很多人喜欢PureMVC。 我从来没有使用它,但我会在下次需要MVC框架时查看它。
“Presenter First”是一种软件开发方法,它结合了模型视图演示者(MVP)设计模式和测试驱动开发的思想。 它可以让你开始用客户的语言编写测试。 例如:
“当我点击'保存'按钮时,文件应该保存,未保存的文件警告应该消失。”
我没有使用“Presenter First”的经验,但是当我有机会的时候我会尝试一下,因为它看起来非常有前途。
其他堆栈溢出问题,你可能会希望看看在这里和这里。
如果您想在任何时候使用WPF ,请查看Model-View ViewModel(MVVM)模式。 这是一个非常好的视频,你应该看看:Jason Dolinger在Model-View-ViewModel上。
MVVM(模型视图视图模型)Winforms的设计模式提供了另一种选择,如果需要的话,它可以使其转换为WPF。 Magical.Trevor是Windows Forms的另一个MVVM示例,它还包含基于属性名称的自动绑定。
也问问你自己为什么使用MVC。
一旦你清楚你的目标 ,选择一个或另一个实施变得更容易。
更新:除了我之前的回答,我建议阅读关于“Presenter First”方法(特别是PDF文章)
我会推荐MVP(实际上是PassiveView模式)而不是MVC。 你并不需要任何特殊的框架,这只是你如何组织你的代码。
一种方法(我通常采用)是将每个窗体分成三个实体:
示例代码(一个简单的伪代码,仅用于说明):
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上编译/运行OK。 由于这是一个学校作业,我建议你实际上花一些时间学习MVC的实际工作方式。
链接地址: http://www.djcxy.com/p/30203.html