日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
代碼重構(gòu)實例:消除冗余代碼

我們的Web項目提供了若干個基于HTTP協(xié)議的POST接口,用于給第三方的用戶寫入數(shù)據(jù),為了驗證寫入數(shù)據(jù)者的身份,這樣的接口肯定會要求對方傳遞身份標(biāo)識,接口得到標(biāo)識以后會驗證寫入者的標(biāo)識,正確就執(zhí)行請求,錯誤就返回失敗信息,由于是基于同樣的檢測身份的機制,每個接口都做了同樣的事情,體現(xiàn)在代碼里就有大量的冗余代碼,如果要消除冗余代碼,我可以把冗余代碼寫成一個函數(shù),在每一個接口里調(diào)用,這樣的話,也會有大量重復(fù)的調(diào)用語句,感覺還是不完美,于是思考之后還是借助OO來做這個事情,需要說明的是,我們的語言是python,web項目采用的框架是webpy。

成都創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價比宜興網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式宜興網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋宜興地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。

  重構(gòu)之前的代碼   class Apply:     def POST(self):         try:             wi = web.input()             token = wi.token             projectId = wi.projectId             serverToken = getServerToken(db,token)             if serverToken == None:                 return '{"result":"error","message":"token is error"}'                          if checkExpires(serverToken):                 return '{"result":"error","message":"token is expires"}'                          userId = serverToken.userId             result = create.joinProject(userId,int(projectId))             if result[0] == True:                 return '{"result":"ok","message":"ok"}'             else:                 return '{"result":"error","message":"%s"}' %(result[1])         except:             if DEBUG:                 raise             return '{"result":"error","message":""}'      class AddFolder:     def POST(self):         try:             wi = web.input()             token = wi.token             serverToken = getServerToken(db,token)             if serverToken == None:                 return '{"result":"error","message":"token is error"}'             if checkExpires(serverToken):                 return '{"result":"error","message":"token is expires"}'                          userId = serverToken.userId             folderName = wi.folderName             pFolderId = int(wi.pFolderId) if hasattr(wi,"pFolderId") else 0             projectId = util.unhash17(int(wi.projectId)) if hasattr(wi,"projectId") else 0                          folderId,deep,msg = tn.newFolder(db,folderName,userId,pFolderId,0,projectId)             if folderId > 0:                 return '{"result":"ok","message":"%s","folderId":"%s","deep":"%s"}' %(msg,folderId,deep)             else:                 return '{"result":"error","message":"%s","folderId":"%s","deep":"%s"}' %(msg,folderId,deep)          except:             if DEBUG:                 raise             return '{"result":"error","message":""}'       我從代碼里挑了兩個API來展現(xiàn)代碼冗余的情況,這兩個API里做了很多一樣的事情,例如使用用戶傳過來的token(身份標(biāo)識)去系統(tǒng)查詢(getServerToken調(diào)用)一旦不匹配告訴用戶token is error,然后繼續(xù)檢查token是否超時,最后,整個代碼是包含在try-catch塊中,一旦有意外的事情(例如BUG)發(fā)生,需要返回錯誤信息給用戶,只有每個API中間一塊的處理代碼是不一樣的,這還是兩個API,實際上整個功能模塊至少有十幾個API,而且還會繼續(xù)增加,那么這種情況下,API越多則冗余代碼越多,并且一旦需要修改就很痛苦,例如,每個catch塊原來就是return出錯誤信息,結(jié)果后來要求給模塊增加調(diào)試狀態(tài),在打開調(diào)試的時候返回異常信息用于調(diào)試,上線時異常時則只能返回規(guī)矩的JSON字符串給用戶   重構(gòu)以后   class OpenApiBase:     def __init__(self):         self.funPOST = self.POST         self.POST = self.post          def post(self):         try:             wi =  web.input()             token = wi.token             self.serverToken = getServerToken(db,token)                          web.debug(str(self.serverToken))                          if self.serverToken == False:                 return '{"result":"error","message":"token is error"}'               if checkExpires(self.serverToken):                 return '{"result":"error","message":"token is expires"}'               #執(zhí)行每個子類具體的代碼             return self.funPOST()         except:             if DEBUG:                 raise             return '{"result":"error","message":""}'   class Apply(OpenApiBase):#繼承OpenApiBase     def POST(self):         wi = web.input()         projectId = wi.projectId                  userId = self.serverToken.userId         result = create.joinProject(userId,int(projectId))         if result[0] == True:             return '{"result":"ok","message":"ok"}'         else:             return '{"result":"error","message":"%s"}' %(result[1])      class AddFolder(OpenApiBase):#繼承OpenApiBase     def POST(self):         wi = web.input()                  userId = self.serverToken.userId         folderName = wi.folderName         pFolderId = int(wi.pFolderId) if hasattr(wi,"pFolderId") else 0         projectId = util.unhash17(int(wi.projectId)) if hasattr(wi,"projectId") else 0                  folderId,deep,msg = tn.newFolder(db,folderName,userId,pFolderId,0,projectId)         if folderId > 0:             return '{"result":"ok","message":"%s","folderId":"%s","deep":"%s"}' %(msg,folderId,deep)         else:             return '{"result":"error","message":"%s","folderId":"%s","deep":"%s"}' %(msg,folderId,deep)    重構(gòu)以后,每個子類的POST函數(shù)只做自己應(yīng)該處理的事情,對于身份的檢測全部交給父類完成,一旦沒通過身份檢測,子類POST里的代碼根本就不會被執(zhí)行


網(wǎng)頁題目:代碼重構(gòu)實例:消除冗余代碼
文章轉(zhuǎn)載:http://www.5511xx.com/article/dhcdhdh.html