gpt4 book ai didi

delphi - 带有 Web 浏览器和 HTML 应用程序的 MVC Delphi 是什么样子的?

转载 作者:行者123 更新时间:2023-12-03 15:34:30 25 4
gpt4 key购买 nike

第一次读到Christer Fahlgren's comment on an answer on this question时我很困惑,他指出,在启动一个在表单上同时使用 Delphi 和 WebBrowser 组件的应用程序时,使用“MVC 风格设计”会受益匪浅,并且使用 HTML 与 CSS 和 JavaScript 来创建灵活的 UI 和动态更新视觉效果的精美组合。

在我听说 Ajax 之前,我已经在 Delphi 中做这件事一段时间了,而且在我听说“MVC”之前也已经很长时间了。

也许这是就以下问题寻求帮助的好机会:使用 MVC 设计的代码是什么样的。

通过阅读工作源代码,然后阅读有关某些技术主题的大量文献,我总是可以更好地理解范例。由 MVC 模式设计的原型(prototype)教科书示例 Delphi-WebBrowser-HTML-DOM 修改应用程序会是什么样子?

最佳答案

一个非常简单的演示应用程序,演示了一般原理:

TModel = class
property ValueList : TList <Double> read ... write ...;
end;

然后,您可以使用多个 View 来可视化模型,即一个 View 在表中显示值,另一个 View 在图表中显示值:

IView = interface ['{0D57624C-CDDE-458B-A36C-436AE465B477}']
public
procedure Update;
end;

TTableView = class (TInterfacedObject, IView)
private
FModel : TModel;
FController : TController;
public
procedure Update;
end;

TDiagramView = class (TInterfacedObject, IView)
private
FModel : TModel;
FController : TController;
public
procedure Update;
end;

View 仅从模型中读取数据。与 GUI 的所有交互都委托(delegate)给 Controller 类(顺便说一下,它使用观察者设计模式):

TController = class
private
FModel : TModel;
FViewList : TList <IView>;
private
procedure UpdateViews;
public
procedure AddDataValue (Value : Double);
end;

AddDataValue 的实现可能类似于:

procedure TController.AddDataValue (Value : Double);
begin
FModel.ValueList.Add (Value);
UpdateViews;
end;

procedure TController.UpdateViews;
var
View : IView;
begin
for View in FViewList do
View.Update;
end;

通过这种方式,您可以实现多项目标:

  • 您可以轻松使用多个 View (允许用户在 View 之间切换,或同时显示它们)
  • 所有数据都位于模型中,并与演示文稿完全分离。更改表示形式,无需更改模型中的任何内容。
  • 要实现持久性,您只需保存模型即可。
  • 您可以使用 Controller 执行所有必要的检查。 (而不是为每个 View 实现这个)

为了获得完整的优点列表,网络上充满了 MVC 模式及其替代方案的讨论。

在 Delphi 应用程序中,您可能会发现 Controller 是一种开销,因为 Delphi 中基于事件的编程风格。我经常做的就是仅将应用程序拆分为模型和 View 。

关于delphi - 带有 Web 浏览器和 HTML 应用程序的 MVC Delphi 是什么样子的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1278725/

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