发新话题
打印

谈一谈VB中Get返回对象时的效率问题(三层开发相关)

谈一谈VB中Get返回对象时的效率问题(三层开发相关)

我写了一个类Menu,其中有方法  
Public  Function  Init(Optional  ByVal  Menu_Id  As  Long)  As  Boolean  
然后写一个类Struct_HTML  
在Struct_HTML中我想有一个属性Menu(这个Menu属性返回Menu对象)  
于是我是这样写的:  
private  mvarMenu_Id  As  Long  
Public  Property  Get  Menu()  As  Menu  
       Set  Menu  =  New  Menu  
       If  mvarMenu_Id  >  0  Then  
               If  Not  Menu.Init(mvarMenu_Id)  Then  
                       '错误处理:Menu没有正确初始化  
               End  If  
       Else  
               ErrMsg  =  "Struct_HTML尚未初始化"  
       End  If  
End  Property  

请大家给我看看这种方法的合理性和可操作性  

因为我的每一个类都是需要进行数据库处理的,所以我想尽可能的让对象在用到的时候才初始化,例如我在get中写上Menu.Init(mvarMenu_Id),而不是在Struct_HTML的初始化函数init(struct_Id)中进行。  

现在有个问题时如果我调用的时候:  
set  obj1=  new  struct_HTML  
if  obj1.init(1)  then  
       '此处我的所有的类的init方法的调用格式都一样,返回的都是Boolean表示是否初始化成功  
       set  obj2=obj1.menu  
end  if  
现在对obj2的操作不会出现任何问题  
         例如:obj2.menuname="haha"bj2.update  
而我这样:  
         obj1.menu.menuname="haha"  
         obj1.menu.update  
是不能通过的,因为每一次都是重新初始化了一个新的menu实例  

请大家讨论一下如果你遇到这种问题,你会用什么方法处理?

TOP

Struct_HTML类中有一个Menu属性,那么你的Struct_HTML类应该有一个Menu属性变量,假设为  
Dim  mvarMenu  as  Menu  
那么应该为  
Public  Property  Get  Menu()  As  Menu  
       if  mvarMenu  is  Nothing  then  mvarMenu=New  Menu  
       If  mvarMenu_Id  >  0  Then  
               If  Not  mvarMenu(mvarMenu_Id)  Then  
                       '错误处理:Menu没有正确初始化  
               End  If  
       Else  
               ErrMsg  =  "Struct_HTML尚未初始化"  
       End  If  
       Set  Menu=mvarMenu  
End  Property

TOP

发新话题