前面的文章也提到了,看了一些服務(wù)器的大師級(jí)的代碼,SmartStruct和自定義序列化的方式都有,如果單單只用C結(jié)構(gòu)體作為語(yǔ)意數(shù)據(jù)載體固然可以,但很多網(wǎng)友也提出了很多質(zhì)疑,最大的缺陷就是靈活性欠佳,誠(chéng)然如此。
這段時(shí)間沉下了心,好好寫(xiě)了一些類(lèi)主要有:
ObjectStream
StreamBuffer
SerializeMap
PacketStruct
...
等等,有了前人的經(jīng)驗(yàn),似乎也算比較順利,一個(gè)個(gè)從基本的數(shù)字,
到數(shù)組,到char[] (很多資料也稱(chēng)之為:raw 二進(jìn)制序列)
再到STL 的一系列容器的序列化工作都實(shí)現(xiàn)了
其中大量使用了模版類(lèi)的泛型設(shè)計(jì),不必要求一個(gè)可序列化的類(lèi)必須繼承某某基類(lèi),只需要具備以下:
SerializeTag ComputeTag();
bool Read(ObjectStream& stream);
bool Write(ObjectStream& stream);
DWORD GetLength(ObjectStream& stream);
bool operator==(const PacketHeader &other) const;
五個(gè)方法就可以了,如果隨意給你一個(gè)事先定義好的類(lèi),可以實(shí)現(xiàn)序列化嗎?當(dāng)然可以,只需要寫(xiě)出該類(lèi)的
Wrapped Proxy,再添加這5個(gè)方法,就能通過(guò) ObjectStream 和 StreamBuffer 實(shí)現(xiàn)該類(lèi)的序列化了
這些是寫(xiě)完成了,回頭看看自己已經(jīng)寫(xiě)好的網(wǎng)絡(luò)邏輯模塊,犯愁了。
唉……,加入序列化,相當(dāng)于高層次的通訊協(xié)議全都變了,包結(jié)構(gòu)要改,所有的業(yè)務(wù)邏輯通訊代碼隨之要改。
之前的工作…… 又要寫(xiě)大量的重構(gòu)代碼了。
重構(gòu)真是件痛苦的事情。
最壞的打算把之前的一些邏輯東西按現(xiàn)有思路重寫(xiě)一遍嘛,二次加工也許能應(yīng)禍得福,把破舊看不過(guò)眼的地方重整理的更漂亮,好比重新裝修升級(jí)一樣
現(xiàn)在,只能告訴自己一件事,沉下心,沉注氣。