首页 > 其他分享 >观察者MCV

观察者MCV

时间:2023-06-10 15:23:11浏览次数:36  
标签:TMyModel end FConnection Create 观察者 视图 DataSet MCV

好几年没用Delphi了,偶尔写写也是兴趣所在,曾经在D上耗费好几年时间,虽然现在做其它的了,2023年就业环境还是不好,工资也没有上涨,很是茫然. Delphi 软件开发中,MVC(Model-View-Controller)模式是一种常用的软件架构模式,它将应用程序分成三个部分:模型、视图和控制器,以实现解耦和增强应用程序的可维护性。

1. 模型(Model):负责处理应用程序的数据逻辑,通常是一个数据访问层。例如,一个简单的模型可以是一个用于连接数据库的类:

unit Model;

interface

uses
Data.DB, Data.Win.ADODB;

type
TMyModel = class
private
FConnection: TADOConnection;
public
constructor Create;
destructor Destroy; override;
function GetData: TADODataSet;
end;

implementation

constructor TMyModel.Create;
begin
FConnection := TADOConnection.Create(nil);
FConnection.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MyDatabase.mdb;Persist Security Info=False';
FConnection.LoginPrompt := False;
FConnection.Connected := True;
end;

destructor TMyModel.Destroy;
begin
FConnection.Free;
inherited;
end;

function TMyModel.GetData: TADODataSet;
var
DataSet: TADODataSet;
begin
DataSet := TADODataSet.Create(nil);
DataSet.Connection := FConnection;
DataSet.CommandText := 'SELECT * FROM MyTable';
DataSet.Open;
Result := DataSet;
end;
2. 视图(View):负责应用程序的用户界面,通常是一个视图层。例如,一个简单的视图可以是一个用于显示数据的表格控件:

unit View;

interface

uses
Vcl.Grids, Vcl.DBGrids, Data.DB;

type
TMyView = class
private
FGrid: TDBGrid;
public
constructor Create(AGrid: TDBGrid);
procedure ShowData(ADataSet: TDataSet);
end;

implementation

constructor TMyView.Create(AGrid: TDBGrid);
begin
FGrid := AGrid;
end;

procedure TMyView.ShowData(ADataSet: TDataSet);
begin
FGrid.DataSource := ADataSet;
FGrid.Visible := True;
end;
3. 控制器(Controller):负责协调模型和视图之间的交互,通常是一个控制器层。例如,一个简单的控制器可以是一个用于调用模型和视图的类:

unit Controller;

interface

uses
Model, View;

type
TMyController = class
private
FModel: TMyModel;
FView: TMyView;
public
constructor Create(AModel: TMyModel; AView: TMyView);
procedure ShowData;
end;

implementation

constructor TMyController.Create(AModel: TMyModel; AView: TMyView);
begin
FModel := AModel;
FView := AView;
end;

procedure TMyController.ShowData;
var
DataSet: TDataSet;
begin
DataSet := FModel.GetData;
FView.ShowData(DataSet);
end;
模型(Model)负责连接数据库和获取数据,视图(View)负责显示数据,控制器(Controller)负责协调模型和视图之间的交互。

通过使用 MVC 模式,我们可以将应用程序的不同部分分离开来,从而实现更好的代码组织和可维护性,在实际应用中很复杂,可根据原型做调整。

标签:TMyModel,end,FConnection,Create,观察者,视图,DataSet,MCV
From: https://www.cnblogs.com/carcode/p/17471318.html

相关文章

  • golang实现设计模式之观察者模式-优缺点,适用场景
    观察者模式是一种行为型模式,其定义一种订阅机制,可在对象事件发生时通知多个“观察”该对象的其他对象。观察者模式常用订阅/发布机制,即发布者持有所有订阅者,当发布者状态变更或者特定行为时,通知所有订阅者。结构1.发布者。属性及行为:属性,订阅者列表,行为,添加、删除订阅者方......
  • 观察者模式
    一、定义多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。二、示例下面用委托、事件,实现观察者模式1.Publisher.cs//定义发布者publicclassPublisher{//声明事件publiceventEv......
  • C++设计模式:观察者模式
    观察者模式又叫做发布-订阅模式;观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动的更新自己。有两大类(主题和观察者)一共四个角色从上面我们可以看到,这里面包含了:(1)抽象主题/抽象......
  • 观察者模式
    一、观察者模式1、概念描述观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,主题对象在状态发生变化时,会通知所有观察者对象。Redis和常用消息中间件的发布订阅模式,都是基于该原......
  • 设计模式-观察者模式(Observer)
    一、 观察者(Observer)模式观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通......
  • 观察者模式(Observer Pattern)
    一、模式动机观察者模式用于描述对象之间的依赖关系,它引入了观察者和观察目标两类不同的角色,由于提供了抽象层,它使得增加新的观察者和观察目标都很方便。观察者模式广泛应用于各种编程语言的事件处理模型中,Java语言也提供了对观察者模式的全面支持。一个对象的状态或行为的变......
  • Python 设计模式-观察者模式
    观察者模式是一种行为设计模式,它允许你定义一种订阅机制,可以在对象事件发生时通知多个观察者对象。下面是一个简单的Python观察者模式代码示例:classSubject:"""被观察者类,维护观察者列表,并在状态发生改变时通知观察者"""def__init__(self):self._......
  • 观察者模式(代码简单介绍)
    观察者模式是一种行为型设计模式,它定义了对象之间的一对多依赖关系,这样当一个对象改变状态时,它的所有依赖者都会被通知并自动更新。在这个模式中,改变状态的对象被称为“主题”,依赖者被称为“观察者”。当使用观察者模式时,同样有三个核心角色:主题(Subject)、观察者(Observer)和具体观......
  • C#设计模式15——观察者模式的写法
    是什么:观察者模式是一种设计模式,它定义了对象之间的一种一对多的依赖关系,使得当一个对象状态发生改变时,它的所有依赖者都能够得到相应的通知并作出相应的反应。观察者模式也被称为发布-订阅模式。为什么:观察者模式可以实现对象之间的松耦合,从而使得对象更容易扩展和维护。同时,......
  • SpringMcv 文件上传下载
    文件上传SpringMVC为文件上传提供了直接的支持,这种支持是通过即插即用的MultipartResolver实现的。Spring用JakartaCommonsFileUpload技术实现了一个MultipartResolver实现类:CommonsMultipartResovlerSpringMVC上下文中默认没有装配MultipartResovler,因此默认情况......