带有WebBroser和HTML应用程序的MVC Delphi是什么样的?

当我第一次阅读
Christer Fahlgren’s comment on an answer on this question时,我感到很困惑,他声称在启动一个在表单上同时使用Delphi和WebBrowser组件的应用程序时,使用’MVC样式设计’会有好处,而使用CSS和JavaScript创建一个奇特的组合灵活的UI和动态更新视觉效果.

在我听到Ajax之前的一段时间里,我一直在Delphi中这样做,而且在我听到关于’MVC’的事情之前很多.

也许这是一个在这个问题上寻求帮助的好时机:使用MVC设计的代码是什么样的.

通过阅读工作源代码,然后阅读一些技术主题的文献,我总是更好地理解范式.原型教科书 – 由MVC模式设计的示例Delphi-WebBrowser-HTML-DOM修改应用程序是什么样的?

最佳答案 一个非常简单的演示应用程序,演示了一般原则:

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

然后,您可以拥有多个可视化模型的视图,即一个显示表中值的视图和一个显示图中值的视图:

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;

视图仅从模型中读取数据.所有与GUI的交互都委托给控制器类(顺便使用Observer设计模式):

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;

这样你可以实现多种目的:

>您可以轻松使用多个视图(允许用户切换视图之间或同时显示它们)
>所有数据都在模型中,并与演示文稿完全分开.更改表示,在模型中不进行任何更改.
>要实现持久性,您只需保存模型.
>您可以使用控制器执行所有必要的检查. (而不是为每个视图实现这个)

为了获得完整的优势列表,Web上充满了对MVC模式及其替代方案的讨论.

在Delphi应用程序中,由于Delphi中基于事件的编程风格,您可能会发现控制器是一种开销.我经常做的是只将我的应用程序拆分为模型和视图.

点赞