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

  • 主题发起人 活化石
  • 开始时间
纯粹接分
 
倒也坦诚
 
我觉得封装DELPHI提供的一些数据库操作没什么必要,data module就可以有这样的作用,干吗自己还要去再封装一次呢。非要自己封装成个类,然后去操作对象,好象多此一举。
而封装一些功能块到还是应该的,比如对数据库出来的数据处理呀什么的,而对数据库的操作是DELPHI的强项,干吗非要去再多做一笔。
 
cjsam你说的有道理,我经历的项目不多,工程也不大,但你作过几个功能、形式类似的软件之后,难免有厌烦,就不能不发出这样的提问:能不能归纳为模块(类),只考虑新的差异,不考虑变脸(界面)等因素。君不见一些专业公司作出的东东,非常快、BUG极少,我想除人力资源外,肯定他们有这方面已经形成的模块(类)。面向对象的介绍在每本书中提及时无论章节多少,大致都差不多。但实际中何时用、何处用、如何用的恰到好处却是最难了特别是在数据库方面。所以我期盼各位富翁的这方面的所得、期盼刘先生的新书。正如lqy所说“能否給一段範例代碼給我學習一下?”不求特全,但求明了,我是很贪的 :-)
 
1.将业务规则分析,映射成类(对象抽象)
2.做一个对象分析器,生成界面框架(我已经实现一个通用的框架Form/ActiveForm,
WebPage,InspectorFrame三种)
3.连接抽象类和分析器及主Form(这个Form无法生动生成)
4.通过数据库访问将对象细化(对象不再抽象),此时写代码已经与界面完全无关了。
 
good good study ,day day up
好好学习,天天向上
学习之!!
 
to cjsam
to 活化石
我觉得封装DELPHI提供的一些数据库操作没什么必要,data module就可以有这样的
作用,干吗自己还要去再封装一次呢。非要自己封装成个类,然后去操作对象,好象
多此一举。

我的观点是这样的,封装数据库操作自然是有理由的,但是不是盲目的封装,至少我是为了
程序的升级维护,特别进两年是数据库连接的多事之年,ODBC ADO ADO.NET DBExpress BDE
你打算在那个数据库引擎上吊死呢?,我们抽象出一个 Interface ,所以目前我
开发的程序支持 DBExpree ADO BDE 这三种数据库连接方式,但是这是根据需求来得
特别是Delphi升级速度特别快,我一般很少相信Delphi的控件下一个版本不改动,
经过很多项目的实际经历最底层要自己控制住才行,看我们原来的项目要维护必须在Delphi 4 下调试,其他版本的Delphi 根本没有办法建立开发环境,一次紧急任务中,
差点要了我的命,想想现在到那里去找Delphi 4 来安装呀,我把所有的 D 版市场全跑
遍了都没发现,还好有个朋友当时刻了一张.....,否则几十万的项目就泡汤了
手累了....
楼主,为了这个贴,我已经呕心沥血
 
to 衫菜
你是靠这种方法混到 800 多名?多谢开化,我从今开始广撒网.....

 
to lqy
我可以给一个应用的例子,但是具体实现希望你能通过自己实践得到,这样你学到的才会
更多,而且我也不希望我的代码误导了你
 
to lqy
这是我测试我的程序内置输入法的一段测试代码,我想你关键是看我是怎么应用的,
看看这种应用是否适合你的需求,如果这样的应用方法不适合,千万别照搬,具体实现
你可要靠自己....
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, Mask, DBCtrls, DBClient,myAdodbEngine,mydbclass,myisrule,
ADODB, ImgList;
type
TForm1 = class(TForm)
ClientDataSet1: TClientDataSet;
DataSource1: TDataSource;
e1: TDBEdit;
e2: TDBEdit;
e3: TDBEdit;
ClientDataSet1Field: TStringField;
ClientDataSet1Field2: TStringField;
ClientDataSet1Field3: TStringField;
ADOConnection1: TADOConnection;
Button1: TButton;
ImageList1: TImageList;
procedure FormKeyPress(Sender: TObject;
var Key: Char);
procedure Button1Click(Sender: TObject);
procedure e2Enter(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
dbi : TmyDBInterface;
sse : TmyISSession;
end;

TtGoods = class(TmyDBClass)
public
procedure iInit;
override;
end;

TtImeObj = class(TmyISSimpleObject)
protected
procedure iFuncInit;
override;
published
procedure GetData;
virtual;
end;

var
Form1: TForm1;
implementation
uses myIme;
{$R *.dfm}
procedure TForm1.FormKeyPress(Sender: TObject;
var Key: Char);
begin
if #13 = Key then
begin
Key := #0;
Selectnext(ActiveControl,True,True);
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
dbi := GiveMeAInterface(ADOConnection1);
sse := TmyISSession.Create(dbi);

end;

procedure TForm1.e2Enter(Sender: TObject);
var
v : TtImeObj;
begin
v := ttImeObj.Create(sse);
try
if iImeActive(e2,e2.Field.asString,v) then
begin
e2.Field.DataSet.Edit;
e2.Field.asString := v.iOut[0].Fields[1].AsString;
e2.Field.DataSet.Post;
e2.SelectAll;
end;
finally
v.Free;
end;
end;

{ TtGoods }
procedure TtGoods.iInit;
begin
inherited;
Self.iTable('GOODS');
Self.iVarcharField('GOODSID',15,'代码',True);
Self.iVarcharField('NAME',35,'名称');
end;

{ TtImeObj }
procedure TtImeObj.GetData;
var
v : TtGoods;
begin
v := TtGoods.Create(iISSession.iDBI);
try
v.iGetByLikeKey(
['代码','名称']
,[iIn[0].FieldByName('输入').AsString + '%'
,iIn[0].FieldByName('输入').AsString + '%']
,iOut[0]
,False
,True
,iIn[0].FieldByName('缓存').AsInteger);
iOut[0].First;
iOut[0].IndexFieldNames := '代码';
finally
v.Free
end;
end;

procedure TtImeObj.iFuncInit;
begin
inherited;
iInitAction('输入法','',[],[TmyImeKey],[TtGoods],'GetData');
end;

{ TtGoodsOut }
procedure TForm1.FormCreate(Sender: TObject);
begin
Button1Click(Sender);
end;

end.
 
to 所有认真看过 Delp 回帖的人
我是今年3月才转向面向对象的,所有观点还很不成熟,如果您也是一个面向对象的
初学者,请参考 汪海涛 的 打潜艇 源代码,对你绝对有帮助
具体地址我忘了... 在 www.google.com 里面找 .... 但 汪海涛 同志大名始终牢记

 
谢谢DELP 可惜上午的时光浪费了,明天看看
 
这篇要上首页
 
今天才认认真真看完全部的回复。总的感觉是zzsczz和人在昆明理解得比较透,或者至少是
英雄所见略同吧。大富翁真是藏龙卧虎啊!高兴高兴!
 
还有
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1061399
上mypine讲得也非常好。
不过我不太同意java方案,毕竟java的VM好慢...即使要换也该换到.net和C#上。
 
嗯,比较同意woyaoying和delp的观点!!!
 
好问题,听课先.
关注中.....
 
收藏先,下雨天在家看
 
wisenow:所有还没有理解oop/ood概念的人都会接受这种毫无意义的封装。这不能怪你。你
暂时还没有到达这种境界,不可能看得懂高手们的发言。也许一两年后你就会明白......
 
顶部