再次请教微软专家和大虾们,关于三层模型的问题
我在http://www.csdn.net/expert/topic/338/338495.shtm中的问题得到的回答与我所期望的有所不同,我可能没有讲清楚我想要的是什么。问题并非描述具体的应用,而是自已对三层模型的一点空想性思考。现将该贴重写如下,有点烦人,呵呵:
>>这个问题也欢迎CSDN众高手讨论,100分啊
假设Presentation层的组件安装在PC上,Bussiness层的组件安装在App Server上,Data层的组件,主要是数据库安装在Data Server上,而PC,App Server,Data Server分别是网络上的三个不同物理结点,数据访问方法采用ADO。这是Windows DNA的典型应用之一吧?
现在的问题是,User service组件调用Bussiness组件,并请求Recordset指针作为输出参数,因为是远程调用,所以要Marshalling Recordset指针,这实际上引起在PC和App Server之间的网络数据传送。而Bussiness组件呢,又通过Data service组件才能获取数据,而且同样通过Recordset指针,而又引起在App Server和Data Server之间的网络数据传送。这样一次数据请求会造成两个网络传输回合,岂不很低效?
>>我关心的不是Marshalling,而是存在两个network trip:以我提的场景看,由于数据层借助业务层提取数据,而业务层访问数据层,数据要经过业务层,因此数据从数据层到业务层,这是一次网络传输;再由业务层到展示层,又一次网络传输。实际上业务层对数据不做处理,只是将展示层的请求转换为对数据层的请求,因此两个网络回合显然是多余的。让展示层直接存取数据层是不可行的,因为有业务规则要由业务层处理。已有的解决方案:1。把业务层与数据层放在一台机器,2。把业务层与展示层放在一台机器。这两种方案恐怕还有必要把两个层的组件放在一个线程公寓里。而且如果要求应用服务器与数据服务器分开的话,两种方案就都不可行了。业务层有无手段,可以让数据层直接传送数据给展示层?难道三层模型非得这么低效吗?