数据库与模式!

原创 2004年08月20日 15:43:00

记得以前看过一个贴子关于数据库与面向对像的,所以
就写了这么一个小东西,(算是个演示程序吧, 也算是面向对像吧,嘿嘿),有问题的话请大家指正!    -------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.

数据库系统模式和模型详解

数据库系统模式和模型     数据(data)是描述事物的符号记录。 模型(Model)是现实世界的抽象。 数据模型(Data Model)是数据特征的抽象,是数据库管理的教学形式框架。...
  • cnds123
  • cnds123
  • 2015年06月29日 09:00
  • 3366

数据库中模式的意义

概念 模式,也称为逻辑模式,是数据库中全体数据的逻辑特征和特征描述,是所有用户的公用数据视图。一个数据库只有一个模式,而外模式不是唯一也不可能是唯一的,模式是数据库逻辑上的视图。数据库模式以某一种数...
  • woshismyawei
  • woshismyawei
  • 2014年02月19日 08:48
  • 982

数据库复习11——关系模式与范式

数据库复习CH11 数据库模式(Schema)是数据库中全体数据的逻辑结构和特征的描述,关系型数据库的模式又叫关系模式,我所理解的关系模式就是数据库中表结构的定义以及多张表之间的逻辑联系关系模式的设计...
  • u014030117
  • u014030117
  • 2015年06月30日 16:53
  • 2658

数据库的三级模式:外模式、模式和内模式

http://database.51cto.com/art/201108/279952.htm 本文我们主要介绍数据库的三级模式:外模式、模式和内模式的一些知识,希望能够对您有所帮助。 ...
  • u010850285
  • u010850285
  • 2014年11月23日 14:57
  • 3908

模式与数据库、数据库中的表的关系:

模式与数据库、数据库中的表的关系: 1个数据库下,可以有多个模式。 1个模式下,可以有0个或多个表 。 首先我来做一个比喻,什么是User,什么是Database,什么是Schema,什么是Ta...
  • dawnsnow5
  • dawnsnow5
  • 2014年07月21日 17:51
  • 1840

数据库基本理论和概念:关系模型

关系模型有三个原理组件:结构性组件、完整性组件以及操纵性组件。      本文主要介绍结构性组件及其它组件的一些基本概念。本文的产生,基于阅读The Definitive Guide to Sqli...
  • acs713
  • acs713
  • 2011年10月12日 11:02
  • 5828

DAO模式与数据库

JDBC(Java Data Base Connection)的作用是连接数据库   先看下jdbc连接SQLServer数据库的简单例子 代码实现(FirstJDBC):  ...
  • qq_30938603
  • qq_30938603
  • 2015年09月22日 19:13
  • 158

闲话数据库(三)---模式的分解

前面刚刚说过一些关系模式范式的东西,不过只是一些指导意见,并不是一些硬性规定。遵从了可以帮我们减少数据库维护的麻烦,不遵从只要自己能够继续维护下去也行。 如果想进行规范化到第三范式,很明显要...
  • seacean2000
  • seacean2000
  • 2016年07月07日 00:02
  • 853

数据库模式理解

三级模式结构:外模式、模式和内模式   一、模式(Schema)   定义:也称逻辑模式,是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。   理解:   ① 一个数据库只...
  • liaohong940908
  • liaohong940908
  • 2016年07月14日 10:12
  • 1366

数据库的三种模式结构

       数据库的三种模式分别为外模式、模式、内模式。       模式描述的是数据的全局逻辑结构,外模式描述的是数据的局部逻辑结构。对应与同一个模式可以有任意多个外模式。在数据库中提供两级映象功...
  • suwait
  • suwait
  • 2007年03月14日 00:38
  • 2288
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据库与模式!
举报原因:
原因补充:

(最多只允许输入30个字)