模式与数据库(仅供参考,嘿嘿)

angelface angelface 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
记得以前看过一个贴子关于数据库与面向对像的,所以
就写了这么一个小东西,(算是个演示程序吧, 也算是面向对像吧,嘿嘿),有问题的话请大家指正! -------CLH
//抽像接口
unit User;

interface

type
TUser = class
protected
FUserName: string;
FPassword: string;
FEmail: string;
procedure SetUserName(const AName: string); virtual; abstract;
function GetUserName: string; virtual; abstract;
procedure SetPassword(const APass: string); virtual; abstract;
function GetPassword: string; virtual; abstract;
procedure SetEmail(const AEmail: string); virtual; abstract;
function GetEmail: string; virtual; abstract;
public
property UserName: string read GetUserName write SetUserName;
property Password: string read GetPassword write SetPassword;
property Email: string read GetEmail write SetEmail;
end;

TUserBuilder = class
private
FUser: TUser;
public
procedure SetUserName(const AName: string); dynamic;
procedure SetPassword(const APass: string); dynamic;
procedure SetEmail(const AEmail: string); dynamic;
constructor Create(User: TUser);
end;

implementation

{ TUserBuilder }

constructor TUserBuilder.Create(User: TUser);
begin
FUser := User;
end;

procedure TUserBuilder.SetEmail(const AEmail: string);
begin
FUser.SetEmail(AEmail);
end;

procedure TUserBuilder.SetPassword(const APass: string);
begin
FUser.SetPassword(APass);
end;

procedure TUserBuilder.SetUserName(const AName: string);
begin
FUser.SetUserName(AName);
end;

end.

//真实的用户

unit GeneralUser;

interface

uses User, SysUtils, Windows, Controls, Classes, Variants;

type
TGeneralUser = class(TUser)
protected
procedure SetUserName(const AName: string); override;
function GetUserName: string; override;
procedure SetPassword(const APass: string); override;
function GetPassword: string; override;
procedure SetEmail(const AEmail: string); override;
function GetEmail: string; override;
end;

implementation

{ TGeneralUser }

function TGeneralUser.GetEmail: string;
begin
Result := FEmail;
end;

function TGeneralUser.GetPassword: string;
begin
if FPassword = '' then Result := ' ' else
Result := FPassword;
end;

function TGeneralUser.GetUserName: string;
begin
Result := FUserName;
end;

procedure TGeneralUser.SetEmail(const AEmail: string);
begin
if AEmail <> '' then FEmail := AEmail;
end;

procedure TGeneralUser.SetPassword(const APass: string);
begin
if APass <> '' then FPassword := APass;
end;

procedure TGeneralUser.SetUserName(const AName: string);
begin
if AName <> '' then FUserName := AName;
end;

end.

//用户控制接口
unit UserController;

interface

uses User;

type
IUserController = interface
function GetUser(UserName: string): TUser;
function Insert(User: TUser): Boolean;
function Update(User: TUser): Boolean;
function Delete(UserName: string): Boolean;
end;

implementation

end.

//代理用户控制
unit ProxyUserController;

interface

uses User, UserController, DbController;

type
TProxyUserController = class(TInterfacedObject, IUserController)
private
FDbUserController: IUserController;
public
function GetUser(UserName: string): TUser;
function Insert(User: TUser): Boolean;
function Update(User: TUser): Boolean;
function Delete(UserName: string): Boolean;
function CheckExsit(userName: string): Boolean;
constructor Create(connStr: string);
end;

implementation

{ TProxyUserController }

function TProxyUserController.CheckExsit(userName: string): Boolean;
begin

end;

constructor TProxyUserController.Create(connStr: string);
begin
FDbUserController := TDbController.Create(connStr);
end;

function TProxyUserController.Delete(UserName: string): Boolean;
begin
FDbUserController.Delete(UserName);
end;

function TProxyUserController.GetUser(UserName: string): TUser;
begin
Result := FDbUserController.GetUser(UserName);
end;

function TProxyUserController.Insert(User: TUser): Boolean;
begin
if not CheckExsit(User.UserName) then Exit else
FDbUserController.Insert(User);
end;

function TProxyUserController.Update(User: TUser): Boolean;
begin
FDbUserController.Update(User);
end;

end.

//真实的用户控制类,主要是和数据库打交道
unit DbController;

interface

uses User, UserController, Resource, DB, ADODB, SysUtils;

type
TDbController = class(TInterfacedObject, IUserController)
private
FConnection: TADOConnection;
FQuery: TADOQuery;
public
function GetUser(UserName: string): TUser;
function Insert(User: TUser): Boolean;
function Update(User: TUser): Boolean;
function Delete(UserName: string): Boolean;
constructor Create(connStr: string); virtual;
destructor Destroy; override;
end;

implementation

{ TDbController }

constructor TDbController.Create(connStr: string);
begin
FConnection := TADOConnection.Create(nil);
FConnection.ConnectionString := connStr;
if not FConnection.Connected then FConnection.Connected := true;
FQuery := TADOQuery.Create(nil);
FQuery.Connection := FConnection;
end;

function TDbController.Delete(UserName: string): Boolean;
begin

end;

destructor TDbController.Destroy;
begin
FConnection.Close;
FreeAndNil(FConnection);
FreeAndNil(FQuery);
inherited;
end;

function TDbController.GetUser(UserName: string): TUser;
begin

end;

function TDbController.Insert(User: TUser): Boolean;
begin
with FQuery do
begin
Close;
SQL.Clear;
SQL.Add('INSERT INTO Account(userName, pass, email) VALUES(:userName, :pass, :email)');
Parameters.ParamByName('userName').Value := User.UserName;
Parameters.ParamByName('Pass').Value := User.Password;
Parameters.ParamByName('Email').Value := User.Email;
ExecSQL;
end;
end;

function TDbController.Update(User: TUser): Boolean;
begin

end;

end.

//客户端
unit Main;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, GeneralUser, User, UserController, DbController, ProxyUserController;

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button2: TButton;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
FUser: TUser;
FUserController: IUserController;
FUserBuilder: TUserBuilder;
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
DbPath: string;
begin
DbPath := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + ExtractFilePath(Application.ExeName) + 'user.mdb' + ';Persist Security Info=false';
FUser := TGeneralUser.Create;
FUserBuilder := TUserBuilder.Create(FUser);
FUserController := TProxyUserController.Create(DbPath);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
FUserBuilder.SetUserName(edit1.Text);
FUserBuilder.SetPassword(edit2.Text);
FUserBuilder.SetEmail(edit3.Text);
FUserController.Insert(FUser);
end;

end.
...全文
评论 42
收藏 已收藏
分享
返回顶部
angelface
数据库相关 2,508 成员 88,437 内容