.net 用Windows窗体实现MVC
我在哪里可以找到一个关于如何在Windows窗体中完全实现MVC模式的好例子 我在各种网站上找到了许多教程和代码示例(例如,.netgovernment和.netgovernment),但其中许多教程和代码示例比MVC更能代表observer模式。由于我想开发的应用程序是用于学校项目的,所以我不愿意使用或之类的框架。您看过吗?我发现,一旦开始构建一个特定的实现,就没有人能够就MVC的真正外观达成一致.net 用Windows窗体实现MVC,.net,winforms,model-view-controller,.net,Winforms,Model View Controller,我在哪里可以找到一个关于如何在Windows窗体中完全实现MVC模式的好例子 我在各种网站上找到了许多教程和代码示例(例如,.netgovernment和.netgovernment),但其中许多教程和代码示例比MVC更能代表observer模式。由于我想开发的应用程序是用于学校项目的,所以我不愿意使用或之类的框架。您看过吗?我发现,一旦开始构建一个特定的实现,就没有人能够就MVC的真正外观达成一致 更新:你可以从一些简单的东西开始,比如。压缩框架代码应在Windows上编译/运行正常。由于这是
更新:你可以从一些简单的东西开始,比如。压缩框架代码应在Windows上编译/运行正常。由于这是一项学校作业,我建议您实际花一些时间学习MVC的实际工作原理。您可能想看看 在这里
在我看来,这是对MVC的巨大改进,尽管它仍然很不寻常。可以找到一个使用Windows窗体滚动自己的MVC实现的好例子。包括源代码 在阅读、研究和编写本作业的代码时,您会发现在如何实现MVC方面存在很多分歧。这是一个简单的案例,反映了关注点的分离,也是连接这一点所需的“管道”的一个很好的例子
当你离开学校时,你可能会想回到其他海报所推荐的框架上。我认为申请书之间差异很大,我们对如何编写申请书的理解仍然非常有限。我以前使用过的Windows窗体应用程序彼此非常不同。我看到的一些设计差异包括(包括大多数组合):
- 直接与数据库对话(2层)
- 使用已为给定应用程序编写的后端(3层)
- 使用一组web服务,这些服务是为许多应用程序编写的,不能为您的应用程序更改。(面向服务的体系结构)
- 操作正在进行更新
- 正在使用完成更新(将命令发送到后端服务器)
- 大量使用/未使用数据绑定
- 大多数数据都是“类似表格”(例如发票),在标准网格控件中运行良好/需要对大多数UI数据使用自定义控件
- 一个开发人员/由10或20名开发人员组成的团队(仅在UI上)
- 使用模拟等进行大量单元测试/无单元测试
还要问自己为什么使用MVC
- 您希望能够对尽可能多的代码进行单元测试吗
- 您是否试图允许尽可能多的代码被重用
- 您是否试图使代码库易于理解
- 101对给定项目有效的其他原因
一旦你明确了你的目标,选择一个或另一个实现就变得更容易了。微软复合界面应用程序块开始了它作为MVC实现的生命(在它实现的其他模式中).然而,发布版本演变成了MVP实现,这可以被认为是对MVC概念的一种不同解释
如果您愿意检查一个非常完整(而且有些复杂)的MVP实现的代码,您可以找到MS-CAB作为Microsoft Smart Client软件工厂的组件之一。它附带源代码。您可以找到它。祝您好运!更新:除了我前面的回答之外,我建议您阅读关于(尤其是PDF文章) 我会推荐MVP(实际上是被动查看模式)而不是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;
}