在多层架构的中间层中企业逻辑和资料库物件如何实现?(100分)

  • 主题发起人 主题发起人 dadabox
  • 开始时间 开始时间
D

dadabox

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠,小弟常常看到中间层用物件物件,但却不知道如何来做?都说什么物件导向,我曾看
到过别的公司的一段代码,他将每一个表都写成了一个物件,如订单就有订单这个物件,而订单
中的各项资料就成了物件的属性.而且这个物件还有新增,修改,删除等等事件,就如同一个活
动的数据表一样.但我有些疑惑?若这样的话,效率会不会高呢?若我只要其中的一项资料,那么
岂不是也要全部读出来?

下面是其中的一段代码,我见其每一个物件的每一个属性都要这样子.这样子是对的吗?
似乎每对一个表做修改,那么每一个栏位都要post一次.而且,若以后物料需要修改栏位,
用什么方法来改呢?我只看到这一部分,服务器端和客户端都没见.所以也不知道这种方法
是好还是不好.

请教各位高手,你们是怎么做的呢?欢迎回答问题.若有建设性的问题,我多多给分.若哪
位仁慈的大侠愿意提供一点源码给小弟借鉴,定感激不尽.(不只是精神上的,还有分哟)
先给100分,不封顶!

{材料特性}
type
TNhSpecrqt = class(TNhObject)
private
function GetSpecrqtid: string;
procedure SetSpecrqtid(value: string);
function GetSpecrqt: string;
procedure SetSpecrqt(value: string);
function GetEnglish: string;
procedure SetEnglish(value: string);
protected
property Specrqtid: string read GetSpecrqtid write SetSpecrqtid;
property Specrqt: string read GetSpecrqt write SetSpecrqt;
property English: string read GetEnglish write SetEnglish;
end;

function TNhSpecrqt.GetSpecrqtid: string;
begin
if DataSource.DataSet <> nil then
if (BookMark <> nil) and DataSource.DataSet.BookmarkValid(Bookmark) then
begin
DataSource.DataSet.GotoBookmark(BookMark);
Result := DataSource.DataSet.FieldByName('specrqtid').AsString;
end
else
Result := '';
end;

procedure TNhSpecrqt.SetSpecrqtid(value: string);
begin
if DataSource.DataSet <> nil then
if (BookMark <> nil) and DataSource.DataSet.BookmarkValid(Bookmark) then
begin
DataSource.DataSet.GotoBookmark(Bookmark);
DataSource.DataSet.Edit;
DataSource.DataSet.FieldByName('specrqtid').AsString := Value;
DataSource.DataSet.Post;
Bookmark := DataSource.DataSet.GetBookmark;
end;
end;

function TNhSpecrqt.GetSpecrqt: string;
begin
if DataSource.DataSet <> nil then
if (BookMark <> nil) and DataSource.DataSet.BookmarkValid(Bookmark) then
begin
DataSource.DataSet.GotoBookmark(BookMark);
Result := DataSource.DataSet.FieldByName('specrqt').AsString;
end
else
Result := '';
end;

procedure TNhSpecrqt.SetSpecrqt(value: string);
begin
if DataSource.DataSet <> nil then
if (BookMark <> nil) and DataSource.DataSet.BookmarkValid(Bookmark) then
begin
DataSource.DataSet.GotoBookmark(Bookmark);
DataSource.DataSet.Edit;
DataSource.DataSet.FieldByName('specrqt').AsString := Value;
DataSource.DataSet.Post;
Bookmark := DataSource.DataSet.GetBookmark;
end;
end;

function TNhSpecrqt.GetEnglish: string;
begin
if DataSource.DataSet <> nil then
if (BookMark <> nil) and DataSource.DataSet.BookmarkValid(Bookmark) then
begin
DataSource.DataSet.GotoBookmark(BookMark);
Result := DataSource.DataSet.FieldByName('english').AsString;
end
else
Result := '';
end;

procedure TNhSpecrqt.SetEnglish(value: string);
begin
if DataSource.DataSet <> nil then
if (BookMark <> nil) and DataSource.DataSet.BookmarkValid(Bookmark) then
begin
DataSource.DataSet.GotoBookmark(Bookmark);
DataSource.DataSet.Edit;
DataSource.DataSet.FieldByName('english').AsString := value;
DataSource.DataSet.Post;
Bookmark := DataSource.DataSet.GetBookmark;
end;
end;
 
其实应该是定位于某一个逻辑的操作,至于要大小到什么的程度,那就因人而已了。
大概就是看看你的运行效率和以后更改的时候的方便吧。
 
好像是这样
RUP中,从客户需求里寻找对象,确定并封装它的属性和方法成一个类,
如果是需要永久保存的,则映射为数据库的表,通常是一个对象对应一个表(连接简单),
也可以一个对象分成几个表(效率高)

比如客户类,其属性[客户ID],[客户名称]等对应为数据库中<客户表>的字段,
同时客户类有各种方法,如AddCustomer(添加客户)

其实这就是封装业务逻辑,将此集中于中间层也是三层的理念之一,至于三层的规划,则具体问题具体分析
OOAD对于编程的速度可能不是最好,但是对开发和维护,应付需求变化有绝对的优势
 
我认为做多层次结构,应该按照OOA的方法分析.
上面是一个很好的例子!
 
他们代码写的很好啊,就是用了太多的Bookmark,不知道会不会减慢速度。
 
在多层中,物件就是企业的实体对象,比如订单,客户等,它有自己的属性和方法等,
企业逻辑可以做成协调对象,例如有客户下了一订单,作为物件的订单,它要新建这个
订单,但是建立这个订单,它涉及到几个方面,如客户物件,库存物件等,协调对象就
是完成他们之间的协调工作的,如通过客户物件了解这个客户的信用额度,以及应该给
它什么扣率,通过库存物件可以知道能否满足订单的数量要求等。
 
哪位有企业中间件的例子,能不能给我借鉴一下?我只想看看到底怎样做成一个中间件,一个
人看起来实在不知道从哪儿下手,也不知道应该怎样做.
 
或者你看看李维的那几本书吧,或许有点帮助。。
 
我看过了,他只是讲应用,我是想看到物件应该怎样构成,我不知道怎么开始.就如同,我怎样
将资料表中的资料放到物件中去?物件怎么构成?我想看到一个完整一点的例子,若分开来,
怎么产生物件或怎么应用资料表我都会.我有几百分,我若能从此受到启发,我可以全部贡献
出来.谢谢哪位帮帮忙!
 
在你最前说的那个就已经是一个很好的例子了,而且这种事不是一次可以做好的,是要通过不断地修改去完成的,你就像你举的那个例子去做就可以了,慢慢来不用急。
 
可惜那个例子没有头,我不知道他们最初的元件是怎么写的,哪位能否提示一二.我也并不要
完整的源代码,我只想看看,一个元件从始至终是怎么定义的.比如说一个订单元件,最初要有
哪些属性,哪些方法,他是继承哪一个元件开始,或者是自己定义的所有企业元件都还要定义
多层其他元件.一级一级下来,我现在很茫然,不知从何处下手,说不懂,似乎又懂一些,说懂了,
又实际不懂.怎么办?哪位大侠教教我?
 
我现在有600分啦,哪位大侠能教我,全给你.
 
这些东西涉及OO的设计.在帖子上是无法讲清楚的.不过这个程序是个很好的例子.写程序就是
应该这样写.有兴趣的话,你可以买本ROSE的书来看看.或者目前市面上有很多讲OOP的书,看下
他们对你有帮助的.:)
 
鸡蛋兄,请问你有相关例子吗?我想只看OOP理论的书也不能具体的做出来.我想看看一个比较
好的例子供我借鉴一下.就这么写,我也不知道怎么写出来.上面的例子只有那么一点点,上不
粘天,下不挨地,我还是有许多不明白.
 
后退
顶部