程序结构问题,哪种结构好??
现有一个程序,要完成从用户接收数据,分析后发向后台,并从后台接收应答数据,重新组织后返回给用户,用户的数据请求分为多种,此处以请求类型1、2、3代替。另外由于从用户收到的包和要发向后台的包结构不同所以在收发时要重新组织数据包。
方案一:
1、从用户端取数据GetData()
2、分析取到的数据AnalyData() -> 在此函数中根据不同请求类型取不同数据字段
3、组织发向后台的数据包PreparePacket() ->在此函数中根据不同请求组织不同的数据请求包,数据源已从analydata函数中取得
4、向后台发请求并接收数据SRData() -> 根据不同的请求将不同的应答接收到缓冲中
5、组织向用户返回的数据包PackAnsData()->根据不同请求将缓冲中的数据打成相应的应答包,数据源从SRData函数中取得
6、返回数据给用户
---------------------大体结构为---------------------------
main()
{
GetData();
AnalyData(); <-----|---case req1: ...
|---case req2: ...
PreparePacket(); <------|---case req1:...
|---case req2:...
SRData(); <--------|---case req1:...
|---case req2:...
PackAnsData(); <----|---case req1:...
|___case req2:...
ReturnAns(); //返回应答数据
}
方案二:
1、从用户端取得数据GetData()
2、首先从数据包中取得请求号然后根据不同的请求号分别处理,将针对每个请求的全套过程放到一个主调函数中,如:
switch(reqno)
case 1: doReq1();
case 2: doReq2();
....
3、在相应的请求处理函数中做分析数据,组织数据、向后台收发、组织返回包、返回给用户,如在doReq1()中
3.1 GetReqFieldReq1()->针对1号请求取相应的字段
3.2 PreparePacketReq1()->针对1号请求组织包
3.3 SRDataReq1()-> 针对1号请求向后台收发数据
3.4 PackAnsDataReq1()->针对1号请求组织返回包
3.5 返回数据给用户
---------大体结构为--------
main()
{
GetData();
switch(reqno)
{
case req1:
doreq1(); <-----|GerReqfieldreq1();
|PreparePacketreq1();
|SRDataReq1();
|PackAnsDataReq1();
case req2:
doreq2(); <-----|GerReqfieldreq2();
|PreparePacketreq2();
|SRDataReq2();
|PackAnsDataReq2();
case ...:
.....
}
ReturnAns(); //返回应答数据 此处理可以放在这,也可放在每个doReq中
}
方案三:
打算建一个基类,然后根据不同的请求从基类中继承不同的子类,然后所有不同的操作在相应的子类中完成。具体细节还没想好,但感觉上有点像方案二。
不知各位有什么看法和想法,哪种方案更好一点,可以让程序看上去更清晰一点。我觉得第三种可能要好一点,不知各位有何高见?