分享
 
 
 

服务器端网络层与逻辑层的通信

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

在软件开发过程中,网络层往往是以一个能够提供底层服务的角色出现。逻辑层是要依赖于网络层的,网络层是为逻辑层提供服务的。对于逻辑层来说,它不需要知道网络层中的具体实现,不需要知道网络层的具体对象名称;对于网络层来说,它不需要知道逻辑层中的设计。层与层之间要实现解耦合,只要网络层和逻辑层之间能够有一套契约存在,然后各自实现对契约中规定的接口编程,那么就算将来网络底层发生变动也不会影响到逻辑层的代码。

为了实现这样的效果,用一个简单的C++代码例子来说明。

假设网络层有个类CNetwork,逻辑层有个类CLogical,它们之间的契约用一个interface接口名叫INetwork。

从调用者的角度来看,创建过程理想中应该是这样的。

CNetwork* pNetwork = new CNetwork();

CLogical* pLogical = new CLogical( (INetwork*)pNetwork );

先创建网络,再创建逻辑,逻辑要依赖于网络。当然这是理想中的,之后再来实现它。

接下来该设计它们之间契约的内容了。为了能简单说明问题,这里就只考虑网络收发的接口怎么设计了。发送可以由逻辑层直接来调用,接受可以通过回调函数由网络层主动通知逻辑层(当然网络不需要知道逻辑的设计,一切就契约来实现)。契约可以是这样的:

typedef void (*RecvFunc)(WPARAM wParam, LPARAM lParam);

interface INetwork

{

virtual void SendNetMessage(WPARAM wParam, LPARAM lParam) = 0;//网络发送

virtual void SetRecvCallBack(RecvFunc pFunc) = 0;//用来设置回调函数

};

现在可以来实现理想中的调用方法了,在CLogical中应该有一个INetwork的接口指针

class CLogical

{

public:

CLogical(INetwork* pNetwork);

virtual ~CLogical();

static void RecvProc(WPARAM wParam, LPARAM lParam);

private:

INetwork* m_pNetwork;

};

构造函数中来初始化接口指针,并且把回调函数的函数指针告诉网络层。

CLogical::CLogical(INetwork* pNetwork) :m_pNetwork(pNetwork)

{

m_pNetwork->SetRecvCallBack(RecvProc);// 设置回调函数

}

void CLogical::RecvProc(WPARAM wParam, LPARAM lParam)

{

// 这里就等着网络层把收到的数据发过来吧~!

}

当然网络层的指责就是遵守INetwork契约来实现功能咯……因此CNetwork应该是继承于INetwork。如下:

.h

class CNetwork :public INetwork

{

public:

CNetwork();

virtual ~CNetwork();

virtual void SendNetMessage(WPARAM wParam, LPARAM lParam);//网络发送功能

virtual void SetRecvCallBack(RecvFunc pFunc);// 让调用者设置回调函数

private:

// ……

private:

RecvFunc m_pFunc;// 调用者回调函数的指针,通过它就可以把网络层接收到的数据发送给逻辑层。

};

逻辑层始终是通过INetwork接口来使用网络的,网络对它来说是隐藏的,不知道网络的任何其它细节;网络层负责遵守INetwork契约来实现功能。这样两者就真正解藕了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有