gpt4 book ai didi

Delphi 7 - 尝试理解MVC模式

转载 作者:行者123 更新时间:2023-12-03 14:56:00 26 4
gpt4 key购买 nike

我正在尝试理解 MVC 模式,这就是我想到的。如果你能如此友善地告诉我我做得是否正确,提出一些改进建议,或者因为我完全失败而批评我,我会非常高兴!

这里是该项目的链接 (Delphi 7):http://www.sendspace.com/file/ynpgre

最佳答案

我已经重写了您的项目以使用 MVC。

主要项目文件:

var
Model: TModel;
Controller: TController;
begin
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);

Model := TModel.Create;
Controller := TController.Create(Model, MainForm);

Application.Run;

Controller.Free;
Model.Free;
end.

型号:

TModel = class(TSubject)
private
FData: TStrings;
public
constructor Create;
destructor Destroy(); override;
procedure AddLine(AText: string);
property Data: TStrings read FData; // Do not write to this directly, since it doesn't call notify!
end;

Controller :

TController = class(TObserver)
private
FModel: TModel;
FView: TMainForm;
public
constructor Create(const AModel: TModel; AView: TMainForm);
destructor Destroy(); override;
procedure ButtonClick(Sender: TObject);
procedure Refresh(ASubject: TSubject); override;
end;

主窗体用作 View ,我已从中删除所有代码。

Controller 将自己注册为观察者并执行所有逻辑:

constructor TController.Create(const AModel: TModel; AView: TMainForm);
begin
inherited Create();
FModel := AModel;
FView := AView;
FModel.Register(Self);
FView.Button1.OnClick := ButtonClick;
FView.Button2.OnClick := ButtonClick;
FView.Button3.OnClick := ButtonClick;
end;

destructor TController.Destroy;
begin
FModel.UnRegister(Self);
FView.Button1.OnClick := nil;
FView.Button2.OnClick := nil;
FView.Button3.OnClick := nil;
inherited;
end;

procedure TController.Refresh(ASubject: TSubject);
begin
FView.ListBox1.Items.BeginUpdate;
try
FView.ListBox1.Items.Assign(FModel.Data);
finally
FView.ListBox1.Items.EndUpdate;
end;
end;

procedure TController.ButtonClick(Sender: TObject);
begin
if Sender = FView.Button1 then begin
FModel.AddLine('Hello');
end else
if Sender = FView.Button2 then begin
FModel.AddLine('Hello World!');
end else
if Sender = FView.Button3 then begin
FModel.AddLine(DateToStr(Now));
end
end;

我在 View <-> Controller 关系上做了一些作弊,但您应该了解总体思路:)。

  • Controller 引用了 View 和模型。
  • View 对模型一无所知。
  • 模型对 View 一无所知。

PS:MVC 模式图(虚线代表观察者/主题关系):

MVC diagram

关于Delphi 7 - 尝试理解MVC模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6873469/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com