关于业务逻辑与数据库分离的问题。 (100分)

  • 主题发起人 主题发起人
  • 开始时间 开始时间
来自:jezon, 时间:2004-5-31 8:51:32, ID:2636690
怎样设计一个数据库可以满足大多说实际情况,就是说数据库能自适应实际情况的变更

现在的数据库就已经能自适应实际情况的变更了
 
用面向对象思想设计的代码访问关系型数据库,这本身就是一个折衷。我觉得有机会要借鉴一下面向对象的数据库
 
to catfox
Delphi在OO编程、UML等方面,自身支持不够,也缺乏第三方软件的支持 。。。
你觉得borland 的coderush 和modalmaker 怎么样?
 
Delphi数据库面向对象编程范例
2004-5-15 2:17:17 (文章类别:Delphi)
{*******************************************************}
{ }
{ 继承范例 }
{ }
{ }
{ 版权所有 (C) 2000,2001 真光软件 }
{*******************************************************}
unit clsPerson;
{*******************************************************
项目:
模块:TPerson,TTeacher,TStudent
描述:OOP范例类
版本:1.0
日期:2001.9.23
作者:黄洪烈
更新:2001.9.23
TODO:
*******************************************************}
interface
uses
?clsApplication,Forms,classes,Dialogs;
const
?C_tblStudent='student.db';//学生类表名
?C_tblTeacher='teacher.db';//老师类表名
type
?TPerson=class(TDbRecordset)
?private
??FTelephone: string;
??FId: string;
??FName: string;
??function GetId: string;
??function GetName: string;
??function GetTelephone: string;
?protected
?? procedure BindFieldvalues;virtual;//设置字段值
?public
??property Id:string read GetId write FId;
??property Name:string read GetName write FName;
??property Telephone:string read GetTelephone write FTelephone;
??procedure ShowId;//显示编码
?end;

?TStudent=class(TPerson)
?private
??FTotalScore: integer;
??function GetTotalScore: integer;
?protected
??procedure BindFieldvalues;override;//设置字段值
?public
??constructor Create(AOwner:TComponent);override;
??function Post:boolean;override;
??property TotalScore:integer read GetTotalScore write FTotalScore;
?end;

?TTeacher=class(TPerson)
?private
??FSubject: string;
??function GetSubject: string;
?protected
??procedure BindFieldvalues;override;//设置字段值
?public
??constructor Create(AOwner:TComponent);override;
??function Post:boolean;override;
??property Subject:string read GetSubject write FSubject;
?end;

implementation
{ TPerson }
{设置字段值}
procedure TPerson.BindFieldvalues;
begin
?FTable.Edit;
?FTable.FieldByName('Id').AsString:=FId;
?FTable.FieldByName('Name').AsString:=FName;
?FTable.FieldByName('Telephone').AsString:=FTelephone;
end;

{定义字段属性}
function TPerson.GetId: string;
begin
?FId:=FTable.FieldByName('Id').AsString;
?Result:=FId;
end;

function TPerson.GetName: string;
begin
?FName:=FTable.FieldByName('Name').AsString;
?Result:=FName;
end;

function TPerson.GetTelephone: string;
begin
?FTelephone:=FTable.FieldByName('Telephone').AsString;
?Result:=FTelephone;
end;

{显示编码}
procedure TPerson.ShowId;
var
?IdCaption,Id:string;
begin
?Id:=FTable.FieldByName('Id').AsString;
?if FTable.TableName=C_tblStudent then
??IdCaption:='Student Id:'
?else
if FTable.TableName=C_tblTeacher then
??IdCaption:='Teacher Id:';
?ShowMessage(IdCaption+Id);
end;

{ TStudent }
{设置字段值}
procedure TStudent.BindFieldvalues;
begin
?inherited;
?FTable.FieldByName('TotalScore').AsInteger:=FTotalScore;
end;

constructor TStudent.Create(AOwner: TComponent);
begin
?inherited;
?FTable.TableName:=C_tblStudent;
?FTable.Active:=True;
end;

{定义字段属性}
function TStudent.GetTotalScore: integer;
begin
?FTotalScore:=FTable.FieldByName('TotalScore').AsInteger;
?Result := FTotalScore;
end;

{保存记录}
function TStudent.Post: boolean;
begin
?FTable.Insert;
?BindFieldvalues;
?Result:=Inherited Post;
end;

{ TTeacher }
{设置字段值}
procedure TTeacher.BindFieldvalues;
begin
?inherited;
?FTable.FieldByName('Subject').AsString:=FSubject;
end;

constructor TTeacher.Create(AOwner: TComponent);
begin
?inherited;
?FTable.TableName:=C_tblTeacher;
?FTable.Active:=True;
end;

{定义字段属性}
function TTeacher.GetSubject: string;
begin
?FSubject:=FTable.FieldByName('Subject').AsString;
?Result := FSubject;
end;

{保存记录}
function TTeacher.Post: boolean;
begin
?FTable.Insert;
?BindFieldvalues;
?Result:=Inherited Post;
end;

end.

 
理论要和实际相结合,如果只有理论,没有实践,只是见林不见木,同样,只有实践而没有理论,则是见木不见林。
希望大家讨论的时候写点代码在上面,多谢了。
 
其实现在主要有两种形式:一、MVC(模式/视图/控制器),主要为smalltalk和boland c++采用,但现在这两种工具差不多被淘汰,优点:可实现一模式多视图功能,后期维护容易,易扩充,缺点:前期工作量大,不能实现多模式多视图功能;二、document/view(文档/视图),主要为VC++的MFC采用,优点:可实现多视图多文档功能,缺点:相对前者,后期维护麻烦一些。
不知我理解对不,请各位指正。
 
to ChaseSun,
你的代码是我一直想要找的那种写法oop
谢谢
受教了
 
oo了但麻烦了很多
 
后退
顶部