简单而经典的用户认证问题,(midas,面向对象和数据库操作想结合),欢迎大家讨论。(100分)

  • 主题发起人 主题发起人 zf4000
  • 开始时间 开始时间
Z

zf4000

Unregistered / Unconfirmed
GUEST, unregistred user!
请各为谈谈在开发分布式系统时,怎样将面向对象和三层结构结合起来,
以用户人证为例,本人先抛砖引玉,陈上自己的想法:
1, 服务器端建立remotedatamodule,拖入adoconnection,adoquery,datasetprovider
2,新建一个objunit,用来声名类,如下:
Type TPerson = class(Tobject)
private
{ Private declarations }
public
name : string[25];
sex : string[4];
{ Public declarations }
end;

type TUser = class(TPerson)
private
{ Private declarations }
public
user_id : string[20];
bumen : string[20];
//根据user_id从数据库取得用户信息
procedure createUserFromId(user_id : string);
procedure insertToDB(str: string);//将user信息插入表中,str格
//式:'user_id',user_id_value,
//'name',name_value
{ Public declarations }
end;

这里出现一个问题,createuserfromid过程该怎么写??我无法访问remotedatamodule里的adoquery控件。思路出现断点。
3,下面的东西还没形成代码,先说说思路:remotedatamodule中构造一个接口:usercheck(),用来检验用户的合法性.
4,客户端我该如何进行客户人证啊?
 
可以为服务器写一些方法以及属性
来让客户端访问和操作
I := connection.Appserver.usercheck();
if I>0 then

 
那user对象中的createuserfromid方法的代码该如何写才能达到效果呢???
只要服务器端架设好,客户端的访问应该是没问题,关键是服务器端啊,
 
哪为有经验的兄弟能想出,帮忙把你们想到的代码写出来,
不一定要正确 ,我关键是参考你们的思路。
 
Midas本身就不是纯OOP的实现,如果追求纯OOP,将要写很多代码,无论开发效率
还是运行效率都不如纯Midas开发,
如果你一定要面向对象,我推荐你使用Bold
 
我帮你答了吧.不过分数好像不太够哦:)
-----------------------------------------------------------
分析:
你想在类TUser中封装对数据库的访问是吧.由于你这个对象是在中间层,而且包含一个或多
个数据模块,那么有两种方式来访问数据库.
1.建立一个普通的数据模块.通过这个数据模块来访问.(或者直接创建ADOQuery)
procedure TUser.CreateUserFromID(User_ID:Integer);
begin
with TCommDM.Create(nil)do

with ADOQuery1do

begin
SQL.Clear;
SQL.Add('SELECT .......');
Open;
Name:=FieldByName('User_Name').AsString;
Sex:=FieldByName('User_Sex').AsString;
Close;
end;
finally
Free;
end;

end;

2.通过对远程数据模块的引用来访问,在对像创建时,引用当前的数据模块,使用完毕之后,
应该释放该引用.
(1),TUser增加一个私有变量FDM:TMyRDM和一个私用变量FRef:IUnknown;
重写TUser的构建函数与释构函数(TMyRDM为你的远程模块)
construcotr TUser.Create(ADM:TMyRDM;
ARef:IUnknown);
begin
FDM:=ADM;
FRef:=ARef;
//这个引用是为了防止数据模块释放而导致该TUser对象不可用.
end;
destructor TUser.Destroy;
begin
FRef:=nil;
//释放该引用.
end;

(2),通过FDM来访问数据库:
procedure TUser.CreateUserFromID(User_ID:Integer);
begin
with FDMdo

with ADOQuery1do

begin
Close;
SQL.Clear;
SQL.Add('SELECT .......');
Open;
Name:=FieldByName('User_Name').AsString;
Sex:=FieldByName('User_Sex').AsString;
Close;
end;
end;
(3),在数据模块提供的接口方法中创建TUser需要如下使用:
procedure TMyRDM.CheckUser(User_ID);
var
AUser:TUser;
begin
_AddRef;
//人为增加一个对该数据模块的引用.用为下面用到了Self as IUnknown.
try
AUser:=TUser.Create(Self,Self as IUnknown);
try
AUser.CreateUserFromID(User_ID);
......
finally
AUser.Free;
end;
finally
_Release;
//人为释放一个引用.
end;
end;

------------------------------------------------------------------
第两种方法似乎比较烦琐,而且应用了一些接口知识.
 
??很说书上都说分布式多层设计能更好的支持面向对象编程,楼上的说法好象跟书上的不符合啊。
你所谓的纯midas是指什么呢?
用用户认证来举个例子吧。
 
我没有试第二种方法,第一种方法已成功,谢谢。
 
后退
顶部