kjv*_*kjv 102 .net model-view-controller winforms
在哪里可以找到关于如何在Windows窗体中完全实现MVC模式的好例子?
我在各个站点上找到了许多教程和代码示例(例如,代码项目和.NetHeaven),但是许多比MVC更能代表观察者模式.由于我想开发的应用程序是针对学校项目的,我不愿意使用像PureMVC或MVC#这样的框架.
Ian*_*ose 113
我认为应用程序彼此之间存在很大差异,我们对应用程序应该如何编写的理解仍然非常有限.我之前使用过的Windows Forms应用程序彼此之间存在很大差异.我见过的一些设计差异(包括大多数组合):
因此,我认为创建一个总是很合适的MVC(或MVP)实现是不可能的.
我见过的最好的帖子真正解释了 MVC以及为什么 MVC系统按照它的方式构建,是Jeremy D Miller的"Build Your Own CAB"系列.通过它工作后,你应该能够更好地理解你的选择. 还应考虑Microsoft的智能客户端指南(CAB/Microsoft Composite Application Block).它有点复杂,但它适用于具有良好适合性的应用程序.
为Winforms项目选择MVC/MVP实现提供值得阅读的概述.很多人喜欢PureMVC.我从来没有使用它,但下次我需要一个MVC框架时我会看一下.
" Presenter First "是一种软件开发方法,它结合了Model View Presenter(MVP)设计模式和测试驱动开发的思想.它允许您从客户的语言编写测试开始.例如:
"当我点击'保存'按钮时,应该保存文件,未保存的文件警告应该消失."
我没有使用"Presenter First"的经验,但是当我有机会时我会试一试,因为它看起来很有前途.
您可能希望查看的其他Stack Overflow问题可以在这里和这里找到.
如果您正考虑在任何时候使用WPF,请查看Model-View ViewModel(MVVM)模式.这是一个非常好的视频你应该看看:Jason Dolinger在Model-View-ViewModel上.
MVVM(模型视图视图模型)Winforms的设计模式提供了另一个选项,可以在需要时更容易转换为WPF. Magical.Trevor是Windows Forms的另一个MVVM示例,它还包括基于属性名称的自动绑定.
还要问问自己为什么要使用MVC.
一旦明确了目标,就可以更容易地选择一种或另一种.
Igo*_*ejc 45
更新:除了我之前的回答,我建议阅读"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;
}
Run Code Online (Sandbox Code Playgroud)
你看过PureMVC了吗?我发现,一旦他们开始构建特定的实现,没有人能够同意MVC的真实情况.
更新:您可以从更简单的东西(如MobileMVC)开始构建自己的.Compact Framework代码应该在Windows上编译/运行OK.由于这是一项学校作业,我建议你花一些时间学习MVC实际上是如何运作的.
归档时间: |
|
查看次数: |
50103 次 |
最近记录: |