delphi三层架构简单实例源码

Delphi三层架构是一种常见的软件设计模式,其主要目的是将应用程序分成三个层次,即表示层、业务逻辑层和数据访问层,以提高程序的可扩展性和可维护性。

在Delphi中,我们可以使用不同的技术和工具实现三层架构,通常的方式是使用数据库连接库(比如ADO、dbExpress、FireDAC等)作为数据访问层,使用自定义类作为业务逻辑层,使用窗体和控件实现表示层。下面,我们来具体介绍如何用Delphi实现简单的三层架构应用程序。

1. 创建数据库和数据表

首先,我们需要明确应用程序所需要的数据对象以及数据表结构。这里我们假设需要实现一个简单的产品信息管理系统,其数据模型包含产品编号、产品名称、价格和描述等字段。在Delphi中,我们可以使用任何支持SQL的数据库来创建数据表。以MySQL为例,可以使用以下的SQL语句创建数据表:

```

CREATE TABLE products (

id INT NOT NULL AUTO_INCREMENT,

name VARCHAR(50),

price FLOAT,

description VARCHAR(255),

PRIMARY KEY (id)

);

```

2. 创建数据访问层

在Delphi中,可以使用TADOConnection、TADOQuery、TADODataSet等组件来访问数据库。首先,我们需要创建一个数据模块,将TADOConnection组件放在数据模块中,如下图所示:

![数据模块](https://img-blog.csdn.net/20180701231344140?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0dob19DaGlhbmdf/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/70)

由于数据访问层是负责与数据库打交道的核心部分,因此这里我们需要一个自定义类来管理数据表。我们创建一个名为TProductDAO的类,它包含打开连接、查询记录、插入记录、修改记录、删除记录等方法,具体实现如下:

```

unit uProductDAO;

interface

uses

System.SysUtils, System.Classes, Data.DB, Data.Win.ADODB;

type

TProductDAO = class(TDataModule)

ADOConnection1: TADOConnection;

ADOQuery1: TADOQuery;

private

{ Private declarations }

public

{ Public declarations }

function GetAllProducts: TDataSet;

procedure InsertProduct(name: string; price: Double; desc: string);

procedure UpdateProduct(id: Integer; name: string; price: Double; desc: string);

procedure DeleteProduct(id: Integer);

end;

var

ProductDAO: TProductDAO;

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}

{ TProductDAO }

function TProductDAO.GetAllProducts: TDataSet;

begin

ADOQuery1.SQL.Text := 'SELECT * FROM products';

ADOQuery1.Open;

Result := ADOQuery1;

end;

procedure TProductDAO.InsertProduct(name: string; price: Double; desc: string);

begin

ADOQuery1.SQL.Text := 'INSERT INTO products(name, price, description) VALUES(:name, :price, :desc)';

ADOQuery1.Parameters.ParamByName('name').Value := name;

ADOQuery1.Parameters.ParamByName('price').Value := price;

ADOQuery1.Parameters.ParamByName('desc').Value := desc;

ADOQuery1.ExecSQL;

end;

procedure TProductDAO.UpdateProduct(id: Integer; name: string; price: Double; desc: string);

begin

ADOQuery1.SQL.Text := 'UPDATE products SET name=:name, price=:price, description=:desc WHERE id=:id';

ADOQuery1.Parameters.ParamByName('id').Value := id;

ADOQuery1.Parameters.ParamByName('name').Value := name;

ADOQuery1.Parameters.ParamByName('price').Value := price;

ADOQuery1.Parameters.ParamByName('desc').Value := desc;

ADOQuery1.ExecSQL;

end;

procedure TProductDAO.DeleteProduct(id: Integer);

begin

ADOQuery1.SQL.Text := 'DELETE FROM products WHERE id=:id';

ADOQuery1.Parameters.ParamByName('id').Value := id;

ADOQuery1.ExecSQL;

end;

end.

```

上面的TProductDAO类封装了常见的CRUD操作,并且使用了参数化查询,以避免SQL注入攻击。注意,在这个类中,我们使用了ADOQuery1组件来执行SQL查询和执行操作。

3. 创建业务逻辑层

业务逻辑层是负责应用程序的业务逻辑的部分,它通常使用自定义的类来完成,这些类处理业务逻辑并执行数据访问层的操作。在Delphi中,我们可以创建一个名为TProductService的类作为业务逻辑层,它包含获取所有产品、添加产品、编辑产品、删除产品等方法,具体实现如下:

```

unit uProductService;

interface

uses

System.SysUtils, System.Classes, Data.DB, uProductDAO;

type

TProductService = class

private

ProductDAO: TProductDAO;

public

constructor Create;

destructor Destroy; override;

function GetAllProducts: TDataSet;

procedure InsertProduct(name: string; price: Double; desc: string);

procedure UpdateProduct(id: Integer; name: string; price: Double; desc: string);

procedure DeleteProduct(id: Integer);

end;

implementation

constructor TProductService.Create;

begin

ProductDAO := TProductDAO.Create(nil);

end;

destructor TProductService.Destroy;

begin

ProductDAO.Free;

inherited;

end;

function TProductService.GetAllProducts: TDataSet;

begin

Result := ProductDAO.GetAllProducts;

end;

procedure TProductService.InsertProduct(name: string; price: Double; desc: string);

begin

ProductDAO.InsertProduct(name, price, desc);

end;

procedure TProductService.UpdateProduct(id: Integer; name: string; price: Double; desc: string);

begin

ProductDAO.UpdateProduct(id, name, price, desc);

end;

procedure TProductService.DeleteProduct(id: Integer);

begin

ProductDAO.DeleteProduct(id);

end;

end.

```

上面的TProductService类封装了TProductDAO类的操作,并提供了一个简单的接口以供其他部分调用。

4. 创建表示层

表示层是负责显示数据和与用户进行交互的部分,通常使用窗体和控件完成。在Delphi中,我们可以使用TForm和TDBGrid等控件来显示数据,使用TEdit和TButton等控件接收用户输入。我们创建一个名为frmProduct的窗体,该窗体包含一个TDBGrid控件用于显示产品列表,以及一些TEdit、TButton等控件用于接收用户输入。

![frmProduct窗体](https://img-blog.csdn.net/2018070123352976?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0dob19DaGlhbmdf/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/70)

在frmProduct窗体中,我们可以使用TProductService类来绑定数据和控件。在窗体的OnShow事件中,我们可以调用GetAllProducts方法获取所有产品的列表,并将其绑定到TDBGrid控件上:

```

procedure TfrmProduct.FormShow(Sender: TObject);

var

ProductService: TProductService;

Products: TDataSet;

begin

ProductService := TProductService.Create;

Products := ProductService.GetAllProducts;

dbgProduct.DataSource := Products;

end;

```

在添加和编辑产品时,我们可以使用TEdit和TButton控件获取用户输入,并将其传递给TProductService类中的插入记录和修改记录方法来执行插入或更新操作:

```

procedure TfrmProduct.btnAddClick(Sender: TObject);

var

name, desc: string;

price: Double;

ProductService: TProductService;

begin

name := edtName.Text;

price := StrToFloat(edtPrice.Text);

desc := edtDesc.Text;

ProductService := TProductService.Create;

ProductService.InsertProduct(name, price, desc);

ShowMessage('添加成功!');

ProductService.Free;

end;

procedure TfrmProduct.btnEditClick(Sender: TObject);

var

id: Integer;

name, desc: string;

price: Double;

ProductService: TProductService;

begin

id := StrToInt(edtID.Text);

name := edtName.Text;

price := StrToFloat(edtPrice.Text);

desc := edtDesc.Text;

ProductService := TProductService.Create;

ProductService.UpdateProduct(id, name, price, desc);

ShowMessage('编辑成功!');

ProductService.Free;

end;

```

在删除产品时,我们可以使用TDBGrid控件来确定要删除的记录,并将其传递给TProductService类的删除方法来执行删除操作:

```

procedure TfrmProduct.btnDeleteClick(Sender: TObject);

var

id: Integer;

ProductService: TProductService;

begin

id := dbgProduct.DataSource.DataSet.FieldByName('id').AsInteger;

ProductService := TProductService.Create;

ProductService.DeleteProduct(id);

ShowMessage('删除成功!');

ProductService.Free;

end;

```

5. 测试应用程序

现在我们已经完成了产品信息管理系统的设计和实现,可以通过编译并启动应用程序来测试它的功能。在测试时,我们可以添加、编辑和删除产品,这些操作将通过TProductService和TProductDAO类与MySQL数据库通信来实现。

![](https://img-blog.csdn.net/20180701235218184?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0dob19DaGlhbmdf/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/70)

至此,我们已经完成了Delphi三层架构简单实例的设计和实现。以上实例作为一个简单的数据管理系统,让我们体验了三层架构的思维范式,理解了各层之间的职责划分和通讯机制。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(111) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部