delphi面向对象及数据库(300分)

  • 主题发起人 活化石
  • 开始时间
这种类看不出有什么好处来,其实delphi的数据库组建的目的就是要把用户常用
的数据库操作用面向对象的方法封装起来,便于用户使用,你在此基础上再次封装,
有多大的意义呢?我觉得,在数据库应用程序中使用面向对象,重点应该放在对商务规则
以及一些vcl没有封装的数据库功能上。而不是在ado、bde、dbexpress上进行二次封装。
 
又是这个时候上网
zzsczz:你让我打开点眼界,但最好能贴点代码.指DEPO的.我有点兴趣了,还赶上个21版本
月亮河主人:谢谢你.但恐怕暂时难以早些结束,是业余时间弄,只好盯住一点打.
woyaoying:看你的代码很亲切,但有一些控件毕业难以割舍,你是如何处理与控件的关系呢,代码很容易懂,但毕竟没用有这种办法实现过,还有点转不过来向,也许没我想象中的难.
习惯很难改呀,各位热心的回答很让我感动,分准备加到600,让我留点银子吧.还请各位多聊聊
 
这个话题很深,加收藏了.
我一般用is 和 as 操作符. 动态生成一个类.(包含有值).
再把类传递到一个专用函数处理.
具体实现我也说不明白 :(
 
to wfzha
在如果不熟悉数据库控件的情况下,你要自己做可能有些难度吧`~
毕竟进行第二次封装对于组件来说没多大意义,但对于开发会实现代码重用。省了不少事情~~
 
我们实现过,基本上实现啦,但是基础组件的封装浪费了太多的人力,
不过后期开发比较爽!
 
我認為對象應該針對業務,而不是針對表
客戶對象 採購單對象 訂單對象
而不是
客戶表對象 採購表對象 訂單表對象
否則你還不如用 DataSet->DataSource
還有,用了業務對象,你還需要考慮數據列表顯示的問題(DBGrid),繼續用DataSet->Datasource->DBGrid的話,你需要考慮對象和 DBGrid這間的交互,總不能每一個修改就 CLose Open一次DataSet吧,如果不用DBGrid,那你要做的事也太多了一點
另外,報表也是個問題,現在所有的報表控件都是基于 DataSet的,自己寫對象的話......

 
对业务进行抽象,
对数据的操作进行高级抽象
编写通用的数据管理界面及后台服务对象
 
目前我所能做到的只是使用点框架,写个过程及函数的来用.封装也看过,用了几个没有领会到内涵,学习,看了楼上的很有启发,收藏先
 
原引;对业务进行抽象,
对数据的操作进行高级抽象
编写通用的数据管理界面及后台服务对象
这位仁兄多少个项目以后,你有此想法,具体作法又如何,请细细道来如何,我等洗耳恭听
 
GUI对象==〉〉代理对象==〉〉业务对象==〉〉代理对象==〉〉数据库操作对象==〉〉db
 
人在昆明:这样的回答,我不满意,人站的层次不同,在你心亦是烂熟的东西,可能对与别人却是难以理解的,对提问者来说一是望尔却步,再者或顾及颜面不懂装懂,当然由衷感谢你的热心,正是由于这些热心人大富翁才有今天的,都是义务回答的吗.
闲言少叙,举个极端的例子,假如你做一个电话簿,用一个DBGRID显示明细,增加时用EDIT,在最后POST时验证一下,电话号码是否为8位,你将如按我们讨论的方法安排用你的代码.希望几行的代码,能给我或有我这样想法的朋友给以启示.不用急,在百忙之中如有空闲不妨布道一番,还是那句话,等待,用心听.谢谢.
 
我觉得必须把业务对象与数据库分离,但是如果不是采用对象数据库,如SQL Server这种关系型数据库,则必须要有一个持久化框架做对象与记录的转化,涉及到框架就比较复杂了,如果业务复杂,存在复杂业务对象的话,还必须写代理对象。不过当这样的框架写好了,业务规则实际上已经是比较简单的事情了,而且复用性是相当好的。本人最近在写这样的框架,有兴趣的朋友希望大家多多讨论。
 
有一篇文章,不是我写的,转载
很多朋友看了上次我写的“创建良好设计的代码(基于Delphi/VCL)”后,对我说感觉上可以接受其中的观点,但似乎说得太简单,不够具体;也有的朋友对其中的一个小例子有些异议。因此便有了此文。
上次,我举的例子是这样的:假设要从某处获得一个字符串列表,然后显示于 TListBox 中,我所推崇的代码是:
ObjectXXX := TObjectXXX.Create;
ListBox1.Items := ObjectXXX.GetStringList;
ObjectXXX.Free;
的确,我承认,单纯从这三行代码来看,似乎有了“滥用对象”之嫌。也许是例子过于简单,给人的感觉是TObjectXXX只有GetStringList这一个public成员函数,如果真的这样的话,那可真是“滥用对象”了。类是对对象的抽象,而对象是由状态和操作(也就是数据和对数据的操作)的集合组成。因此,没有状态的对象不是对象!没有私有数据成员的类的设计是失败的设计(那不是类,而是接口了)。
好,下面我就举一个详细的例子来说明,如何将界面代码和功能代码分离。
假设我要做一个简单的个人通讯录管理软件,很显然,整个软件分为两部分:一部分是面象用户的,也就是所谓界面部分,我可以提供四个按钮(分别为“添加”、“删除”、“修改”、“查找”)和一个编辑框(显示通讯录信息和接受用户输入)用于和用户交互;另一部分是功能化的,也就是软件内部的对于通讯录的存取操作。
于是,有了一个TAddrBook类,它是对功能化部分的抽象。
TAddrBook = class
private
//一些私有成员
public
constructor Create;
destructor Destroy;override;
GetCurIndex: Integer;
FindRecord(strString): Integer;
GetRecord(nIndex:Integer): String;
SetRecord(nIndex:integer;
strRec:String): Boolean;
AddRecord(strRec:String): Boolean;
DelRecord(nIndex): Boolean;
//其它共有成员函数
end;
私有成员之所以无法确定,主要是取决于这个类的实现。
如此,可以将对通讯录的存取操作的逻辑封装。而界面部分的代码不会涉及到这些存取逻辑。界面部分代码如下:
var
Form1: TForm1;
AddrBook: TAddrBook;
nCurRec: Integer;
implementation
procedure TForm1.FormCreate(Sender: TObject);
begin
AddrBook := TAddrBook.Create;
nCurRec := AddrBook.GetCurIndex;
end;

procedure TForm1.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
AddrBook.Free;
end;

//添加按钮
procedure TForm1.Button1Click(Sender: TObject);
begin
if not AddrBook.AddRecord(memo1.Text) then
ShowMessage("error");
end;

//删除按钮
procedure TForm1.Button2Click(Sender: TObject);
begin
if not AddrBook.DelRecord(nCurRec) then
ShowMessage("error");
end;

//修改按钮
procedure TForm1.Button3Click(Sender: TObject);
begin
if not AddrBook.SetRecord(nCurRec, memo1.Text) then
ShowMessage("error");
end;

//查找按钮
procedure TForm1.Button4Click(Sender: TObject);
begin
memo1.Text := AddrBook.GetRecord(FindRecord(memo1.Text));
end;

以上界面部分的代码,不涉及任何存取逻辑,每个模块的代码简单,易懂,便于维护。而实际上,该通讯录是使用数据库保存还是用文本文件来保存,界面代码都不知道;使用数据库的话,是通过ODBC还是ADO还是BDE访问数据库,界面代码也不知道。实际上,这些存取逻辑的东西取决于TAddrBook类的实现,TAddrBook类的实现可以单独的放在一个.pas文件中,对TAddrBook类的实现的任何更改,都不会影响界面部分。维护代码的时候,将更改局限于某一个模块中的做法是非常明智的。

Nicrosoft
 
人在昆明,谢谢
 
在delphi的开发环境中开发纯面象对象的数据库应用软件,在目前来说还是一个相当费力的。这主要是由于对象向数据库持久化的问题没能解决。现在有一些Object persistence Framework 中间软件包,但都还不是很成熟。
 
学习一下,
关注。。。。。。
 
不知学那么高深是什么样子,佩服
中国自己的软件有希望了
 
有空闲一定尝试一下,请继续谈谈自己的心得
 
我也说不上VB和Delphi谁优,但我用Delphi的思想在VB中实现的时候真的很简单.
几乎是完全把界面与类分开了.有这方面想法的共同学习.
MSN:zhangw022@gis-rs-gps.com
 
忙了一夜,一个小工程即将接进尾声,心里有些畅快,但细想一下,除了个别语句有点收获外
作得老是老一套,没有什么质的飞跃,就象跟别人学了一照,从形式上看没有大的变化,所以寄
希望这个贴子,能获得各位富翁从艰辛中得来的经验,我喜欢站在巨人的肩膀上.在衣食尚有照落的时候,凭兴趣,作点自己喜欢的东西,不知还能坚持多久,看到一些小友感叹自己快接进
30了,觉得好笑,那我这把年龄不是早就被一脚揣翻了吗,幸亏心态还可以.
各位请继续指点,我感觉自己有时看书时不懂,但奇怪的是有时一瞬间就明白了,我想从这里
找这种感觉
 
顶部