C# 如何在使用旧WinForms项目的过程中最小化工作时间成本?
我的主要目标是在使用旧WinForms项目的过程中最小化工作时间成本。我用Realization MCV+WinForms做了一个例子。成功了。我有清晰的模型,但我在Controller.cs中有两个方法(OnSuper()和WorkMethod())-我不喜欢它们。它们没有功能性,但当有人在没有面包的黄油上涂黄油时,它们就有了外观。如果没有MPV的接口和WPF,我如何升级这个想法?或者这不是一个好方法,我必须创建一个新的WPF项目 Class Model.csC# 如何在使用旧WinForms项目的过程中最小化工作时间成本?,c#,winforms,model-view-controller,C#,Winforms,Model View Controller,我的主要目标是在使用旧WinForms项目的过程中最小化工作时间成本。我用Realization MCV+WinForms做了一个例子。成功了。我有清晰的模型,但我在Controller.cs中有两个方法(OnSuper()和WorkMethod())-我不喜欢它们。它们没有功能性,但当有人在没有面包的黄油上涂黄油时,它们就有了外观。如果没有MPV的接口和WPF,我如何升级这个想法?或者这不是一个好方法,我必须创建一个新的WPF项目 Class Model.cs class Model {
class Model
{
public int X { get; set; }
public int Y { get; set; }
public int R { get; set; }
public Model() { }
public Model(int x, int y)
{
X = x;
Y = y;
}
public int GetRes()
{
return X + Y;
}
}
类别Form1.cs
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
button1.Click += delegate
{
Controller controller = new Controller
(
this,
Int32.Parse(this.textBox1.Text),
Int32.Parse(this.textBox2.Text)
);
controller.SuperEvent += Controller_SuperEvent;
controller.OnSuper();
};
}
private void Controller_SuperEvent(object sender, EventArgs e)
{
Controller controller = sender as Controller;
textBox3.Text = controller.WorkMethod();
controller.WorkMethod();
}
}
和类控制器.cs
class Controller
{
public event EventHandler SuperEvent;
Model model;
Form1 form1;
public int Result { get; set; }
public int CX { get; set; }
public int CY { get; set; }
public Controller(Form1 form1, int cX, int cY)
{
this.form1 = form1;
this.model = new Model();
CX = cX;
CY = cY;
}
public void OnSuper()
{
SuperEvent?.Invoke(this, EventArgs.Empty);
}
public string WorkMethod()
{
model.X = CX;
model.Y = CY;
return model.GetRes().ToString();
}
}
为了简化可维护性,请在各层职责之间划清界限 负责业务逻辑的模型
class Model
{
public int X { get; set; }
public int Y { get; set; }
public Model() {}
public int GetRes() => X + Y
}
ViewModel负责准备要在视图中显示的数据(如果需要)以及调用从视图请求的模型业务逻辑操作。INotifyPropertyChanged
将通知视图可能的更改,而不依赖于具体的视图类型
class ViewModel : INotifyPropertyChanged
{
private readonly Model _model;
public int X { get; set; }
public int Y { get; set; }
private string _result = "";
public string Result
{
get
{
return _result;
}
private set
{
if (_result.Equals(value) == false)
{
_result = value;
RaisePropertyChanged();
}
}
}
public ViewModel(Model model) => _model = model;
public void CalculateResult()
{
Result = _model.GetRes().ToString();
}
// Implementation of INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
视图,其职责是在用户请求时显示viewmodel中的值或调用viewmodel操作
public partial class View : Form
{
private ViewModel _viewmodel;
public View()
{
InitializeComponent();
var model = new Model { X = 10, Y = 20 }
_viewmodel = new ViewModel(model);
// Bind controls to the viewmodel
textboxForX.DataBindings.Add("Text", _viewmodel, "X", true);
textboxForY.DataBindings.Add("Text", _viewmodel, "Y", true);
labelForResult.DataBindings.Add("Text", _viewmodel, "Result", true);
}
private void CalculateButton_Click(object sender, EvetnArgs e)
{
_viewmodel.Calculate();
}
}
请注意,在简单的情况下(如上所述),您可以跳过viewmodel“层”并将视图直接绑定到模型。但在视图和业务逻辑之间有一个“缓冲区”,当项目开始增长时,会使您的生活变得更轻松。为了简化可维护性,请在层与层之间划清责任界限 负责业务逻辑的模型
class Model
{
public int X { get; set; }
public int Y { get; set; }
public Model() {}
public int GetRes() => X + Y
}
ViewModel负责准备要在视图中显示的数据(如果需要)以及调用从视图请求的模型业务逻辑操作。INotifyPropertyChanged
将通知视图可能的更改,而不依赖于具体的视图类型
class ViewModel : INotifyPropertyChanged
{
private readonly Model _model;
public int X { get; set; }
public int Y { get; set; }
private string _result = "";
public string Result
{
get
{
return _result;
}
private set
{
if (_result.Equals(value) == false)
{
_result = value;
RaisePropertyChanged();
}
}
}
public ViewModel(Model model) => _model = model;
public void CalculateResult()
{
Result = _model.GetRes().ToString();
}
// Implementation of INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
视图,其职责是在用户请求时显示viewmodel中的值或调用viewmodel操作
public partial class View : Form
{
private ViewModel _viewmodel;
public View()
{
InitializeComponent();
var model = new Model { X = 10, Y = 20 }
_viewmodel = new ViewModel(model);
// Bind controls to the viewmodel
textboxForX.DataBindings.Add("Text", _viewmodel, "X", true);
textboxForY.DataBindings.Add("Text", _viewmodel, "Y", true);
labelForResult.DataBindings.Add("Text", _viewmodel, "Result", true);
}
private void CalculateButton_Click(object sender, EvetnArgs e)
{
_viewmodel.Calculate();
}
}
请注意,在简单的情况下(如上所述),您可以跳过viewmodel“层”并将视图直接绑定到模型。但是在视图和业务逻辑之间有一个“缓冲区”,当项目开始增长时,会使您的生活更轻松。如果代码看起来毫无意义,那么您就做对了。MVC模式的要点是编写易于维护的代码。人们的期望是,十年后的事情看起来不再毫无意义,但你无法预测未来。顺便说一句,很多针对Winforms的MVC框架,在编写自己的之前一定要先看一看。如果代码看起来毫无意义,那么你就做对了。MVC模式的要点是编写易于维护的代码。人们的期望是,十年后的事情看起来不再毫无意义,但你无法预测未来。顺便说一句,Winforms有很多MVC框架,在自己制作之前一定要先看看。