国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

避免重復代碼

2019-11-08 01:52:05
字體:
來源:轉載
供稿:網友

最近大家都在忙著改BUG,而我卻比較閑,開發的模塊沒有什么BUG,決定抽些時間改下正在開發項目中的一些壞代碼。

//壞代碼 SC_ResponseMsgPRoto.Builder responseMsgBuilder = SC_ResponseMsgProto.newBuilder();//重復一 DataMsgProto.Builder dataMsgBuilder = DataMsgProto.newBuilder();//重復二 dataMsgBuilder.setB(b.build()); responseMsgBuilder.setDataMsg(dataMsgBuilder.build());//重復三 responseMsgBuilder.setA(a.build()); sendMsgToClient(channel, responseMsgBuilder.build());//重復四 message SC_ResponseMsgProto { optional A a = 1; optional B b = 2;} message A { optional int32 num = 1; optional C c = 2;} message B { optional int32 num = 1;} message C { optional int32 num = 1;}

項目客戶端和服務器采用的是Google的protobuf協議,數據結構設計采用的是森林結構。如上所示,SC_ResponseMsgProto是最外層對象,在最外層對象下有多個不同類別的子對象,如A、B,子對象下還擁有一些不同類別的子對象C,最終成為一個森林結構,森林里每個根對象都是一顆樹。對象間有時有一些引用關系,比如,A對象使用了C引用。這樣的設計在開發中是比較常見的,但是運用到項目中使用時比較流水賬,大量相同名字的對象代碼重復出現在項目中。對于每個程序員員來說,避免重復代碼是大家都想做的。于是我大約花了不到30行代碼來避免以上標注的四個重復地方,代碼如下:

/** * 下發給客戶端的消息 */ private final LinkedList<GeneratedMessageLite> responseMsgs = new LinkedList<>(); //添加消息 public void putMsg(GeneratedMessageLite msg) { synchronized (responseMsgs) { responseMsgs.add(msg); } } //發送消息 public void sendMsg(Channel channel) { //和客戶端通訊的數據 SC_ResponseMsgProto.Builder responseMsgBuilder = SC_ResponseMsgProto.newBuilder(); DataMsgProto.Builder dataMsgBuilder = DataMsgProto.newBuilder(); try { for (GeneratedMessageLite messageLite : responseMsgs) { if (messageLite instanceof A) { responseMsgBuilder.setA((A) messageLite); } else if(messageLite instanceof B) { dataMsgBuilder.setB((B) messageLite); } responseMsgBuilder.setDataMsg(dataMsgBuilder.build()); } sendMsgToClient(channel, responseMsgBuilder.build()); }catch (Exception e) { e.printStackTrace(); logger.error(e.getMessage(), e); } finally { responseMsgs.clear(); } } //優化后代碼 role.putMsg(a.build()); role.putMsg(b.build()); role.sendMsg(channel);
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 留坝县| 阜新| 保定市| 桓台县| 天峻县| 通海县| 仪征市| 惠水县| 长汀县| 弥勒县| 陵水| 宁阳县| 太仓市| 垣曲县| 遂川县| 清涧县| 青田县| 密山市| 麟游县| 靖州| 大埔县| 彰武县| 麟游县| 定结县| 长丰县| 潢川县| 锡林郭勒盟| 乌审旗| 荣昌县| 昌乐县| 浦县| 宜城市| 电白县| 馆陶县| 江都市| 南宁市| 库尔勒市| 开原市| 大兴区| 田阳县| 资源县|