===代码和界面分离===

138075 2006-11-30 05:17:11
做法:代码与界面分开,用户层和业务层分离。
下面是代码,请个位大虾帮忙看下这么写是否科学,有什么不对的地方或者不科学的地方请指教,非常感谢:

unit InfoClass;

interface

uses
DB, ADODB;

//== TYPE BEGIN ========================================
type
TAppInfo = class(TObject)
private
FAdoconn: TADOConnection;
public
destructor Destroy; override;
end;

{员工信息}
TUserInfo = class(TAppInfo)
private
function SPUser: TADOStoredProc;
public
function GetUserList(AConn: TADOConnection): TADOStoredProc;
{
function Append....
function Update...
function Delete...
}
end;

{部门信息}
//...
{商品信息}
//...

//== TYPE END ===========================================

function UserInfo: TUserInfo;

implementation

var
_UserInfo: TUserInfo;
_SPUser: TADOStoredProc;

{ TInfo }

//销毁实例,释放内存

destructor TAppInfo.Destroy;
begin
//这里添加需要释放的东西...
inherited;
end;

{ TUserInfo }

//检测_UserInfo是否存在,然后赋于UserInfo;
function UserInfo: TUserInfo;
begin
if _UserInfo = nil then _UserInfo := TUserInfo.Create;
Result := _UserInfo;
end;

//取员工存储过程组件
function TUserInfo.SPUser: TADOStoredProc;
begin
if _SPUser=nil then _SPUser := TADOStoredProc.Create(nil);
_SPUser.Connection := FAdoconn;
Result := _SPUser;
end;

//获得员工信息表记录
function TUserInfo.GetUserList(AConn: TADOConnection): TADOStoredProc;
begin
FAdoconn := AConn;
with SPUser, SPUser.Parameters do
begin
close;
clear;
ProcedureName := 'AP_GetInfoList;1';
Filtered := false;
Parameters.Refresh;
ParamByName('@Type').Value := 5;
Open;
end;
Result := SPUser;
end;



//销毁对象

initialization
finalization
if _UserInfo <> nil then _UserInfo.Free;
if _SPUser<> nil then _SPUser.Free;

end.



使用:======================================

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, DB, ADODB, StdCtrls, Grids, DBGrids;

type
TForm1 = class(TForm)
AdoConn: TADOConnection;
DsInfo: TDataSource;
DBGrid1: TDBGrid;
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses myclass;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
DsInfo.DataSet := UserInfo.GetUserList(AdoConn);
end;

...全文
291 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cn_tigers 2006-11-30
  • 打赏
  • 举报
回复
挺好的.也可找.net的petshop看看.:)
看書不如看代碼哈.
看完代碼再看書.
chijingde 2006-11-30
  • 打赏
  • 举报
回复
可以啦

怎么写舒服,怎么写方便,怎么写快就怎么写

写代码

其实就那么回事
GARNETT2183 2006-11-30
  • 打赏
  • 举报
回复
你去看看代理模式,还有桥接模式。。。
qiume 2006-11-30
  • 打赏
  • 举报
回复
去找Java的Petshop看看
阿发伯 2006-11-30
  • 打赏
  • 举报
回复
这是一种典型的面向过程的方式,直接写几个函数/过程
138075 2006-11-30
  • 打赏
  • 举报
回复
这样写的目的:
写界面的时候,只要引用InfoClass, 就可以直接使用Userinfo了,而不需要

var UserInfo:

UserInfo := TUserInfo.Create;
...
UserInfo.free;
它会自动创建,自动销毁;

还有不必要关心UserInfo.GetUserInfo是用什么方式取数据,是用AdoQuery
还是用AdoTabel,或者存储过程,如果改变则只需要修改TUserInfo,所有的
界面引用都不需要改.

以上代码测试通过,但是我想请有经验的前辈指教有什么不足的地方,或在以后的
维护中有什么隐患(维护是很可怕的工作:( )
hydonlee 2006-11-30
  • 打赏
  • 举报
回复

适合Delphi的模式:

逻辑全部写到数据模块中,
界面在form中处理

5,927

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧