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

  • 主题发起人 活化石
  • 开始时间

衫菜

Unregistered / Unconfirmed
GUEST, unregistred user!
纯粹接分
 

活化石

Unregistered / Unconfirmed
GUEST, unregistred user!
倒也坦诚
 
C

clever_boy_2000

Unregistered / Unconfirmed
GUEST, unregistred user!
C

cjsam

Unregistered / Unconfirmed
GUEST, unregistred user!
我觉得封装DELPHI提供的一些数据库操作没什么必要,data module就可以有这样的作用,干吗自己还要去再封装一次呢。非要自己封装成个类,然后去操作对象,好象多此一举。
而封装一些功能块到还是应该的,比如对数据库出来的数据处理呀什么的,而对数据库的操作是DELPHI的强项,干吗非要去再多做一笔。
 

活化石

Unregistered / Unconfirmed
GUEST, unregistred user!
cjsam你说的有道理,我经历的项目不多,工程也不大,但你作过几个功能、形式类似的软件之后,难免有厌烦,就不能不发出这样的提问:能不能归纳为模块(类),只考虑新的差异,不考虑变脸(界面)等因素。君不见一些专业公司作出的东东,非常快、BUG极少,我想除人力资源外,肯定他们有这方面已经形成的模块(类)。面向对象的介绍在每本书中提及时无论章节多少,大致都差不多。但实际中何时用、何处用、如何用的恰到好处却是最难了特别是在数据库方面。所以我期盼各位富翁的这方面的所得、期盼刘先生的新书。正如lqy所说“能否給一段範例代碼給我學習一下?”不求特全,但求明了,我是很贪的 :-)
 
B

barton

Unregistered / Unconfirmed
GUEST, unregistred user!
1.将业务规则分析,映射成类(对象抽象)
2.做一个对象分析器,生成界面框架(我已经实现一个通用的框架Form/ActiveForm,
WebPage,InspectorFrame三种)
3.连接抽象类和分析器及主Form(这个Form无法生动生成)
4.通过数据库访问将对象细化(对象不再抽象),此时写代码已经与界面完全无关了。
 

王毅哲

Unregistered / Unconfirmed
GUEST, unregistred user!
good good study ,day day up
好好学习,天天向上
学习之!!
 
D

delp

Unregistered / Unconfirmed
GUEST, unregistred user!
to cjsam
to 活化石
我觉得封装DELPHI提供的一些数据库操作没什么必要,data module就可以有这样的
作用,干吗自己还要去再封装一次呢。非要自己封装成个类,然后去操作对象,好象
多此一举。

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

delp

Unregistered / Unconfirmed
GUEST, unregistred user!
to 衫菜
你是靠这种方法混到 800 多名?多谢开化,我从今开始广撒网.....

 
D

delp

Unregistered / Unconfirmed
GUEST, unregistred user!
to lqy
我可以给一个应用的例子,但是具体实现希望你能通过自己实践得到,这样你学到的才会
更多,而且我也不希望我的代码误导了你
 
D

delp

Unregistered / Unconfirmed
GUEST, unregistred user!
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.
 
D

delp

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

 

活化石

Unregistered / Unconfirmed
GUEST, unregistred user!
谢谢DELP 可惜上午的时光浪费了,明天看看
 
J

jihenglixin

Unregistered / Unconfirmed
GUEST, unregistred user!
这篇要上首页
 
B

barton

Unregistered / Unconfirmed
GUEST, unregistred user!
今天才认认真真看完全部的回复。总的感觉是zzsczz和人在昆明理解得比较透,或者至少是
英雄所见略同吧。大富翁真是藏龙卧虎啊!高兴高兴!
 
B

barton

Unregistered / Unconfirmed
GUEST, unregistred user!
还有
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1061399
上mypine讲得也非常好。
不过我不太同意java方案,毕竟java的VM好慢...即使要换也该换到.net和C#上。
 
W

wisenow

Unregistered / Unconfirmed
GUEST, unregistred user!
嗯,比较同意woyaoying和delp的观点!!!
 
R

RGKJ

Unregistered / Unconfirmed
GUEST, unregistred user!
好问题,听课先.
关注中.....
 
Y

yue_shan

Unregistered / Unconfirmed
GUEST, unregistred user!
收藏先,下雨天在家看
 
B

barton

Unregistered / Unconfirmed
GUEST, unregistred user!
wisenow:所有还没有理解oop/ood概念的人都会接受这种毫无意义的封装。这不能怪你。你
暂时还没有到达这种境界,不可能看得懂高手们的发言。也许一两年后你就会明白......
 
顶部