「三人行,必有吾師焉,擇其善者而從之,其不善者而改之」——一樣的需求,一樣的項目,對照本身代碼分析隊友的代碼我的以爲真的是一個很好的學習方法。小到如註釋,命名規則一些慣用法,大到整個工程的編碼思路甚至整個軟件架構,對方好的方面積極吸收,壞的方面則儘可能避免(對我這種菜雞仍是主要是前一方面 --__-- )另外結合本學期選的軟件架構課程,在優缺點分析上我將分爲軟件架構(整個工程模式風格)和具體實現(實現思路和細節)兩大塊。數據庫
一,優勢:編程
1.軟件架構層面(模式風格層面):數組
1)隊友的工程是很典型的管道-過濾器風格——她把整個工程,需求化爲了許多能夠重用的小函數,數據粒度很是高,不一樣過濾器即函數間只由傳遞參數創建聯繫,使得她的代碼有很強的可維護性與可拓展性,並且代碼有問題時很容易調試,能夠快速鎖定問題函數,舉個小栗子:架構
相似老師PPT的栗子她將我創建文件夾及txt文件的大函數分爲了獲取當前路徑,創建文件夾,創建文件三個很小的函數,這樣作對於任意一個小功能之後若是想要調用就能夠直接調用了。這一點感受比起各類實現上細節上的收穫更大,培養一個好的編程風格模式努力提升代碼複用性與可拓展性仍是很重要滴!函數
2)其次她將帳戶,用戶名存儲在一個文件內相似一個小型數據庫來實現能夠便捷增改刪用戶登陸信息,雖然對於目前較小系統來講每次登錄均須要訪問文件對比信息增長了I/O的時間,但更具拓展性,對於數據量更大的大系統來講比採用結構體,二維字符串數組的方式顯然科學多了。學習
2.具體實現層面(實現思路及細節):編碼
1)她的代碼功能設計上更加人性化,更方便,經過在主程序中登錄後循環調用選擇題目數量,切換難度,出題,查重實現了無需退出系統從新登陸便可屢次打印題目而且能夠隨時切換難度與數量。spa
2)她的代碼思路更嚴密更科學,在輸出前括號後先限制輸出運算符,數字後才能再輸出後括號,這樣就避免了(0)這樣沒意義的括號操做。設計
3) 備註嚴謹認真,讓人讀代碼很容易理解。整個工程每一個函數前全用一致的格式備註,交代清功能,參數。調試
3)她在實現開根號時很嚴謹就是採用了「√」,不像我那麼懶不會怎麼輸出根號也沒查直接用的^0.5.(--__--)
二,缺點
1.軟件架構層面(模式風格層面):
管道-過濾器風格的數據粒度控制這種東西的確有點難控制,代碼中感受有些地方太高的數據粒度反而變爲了缺點,一些很簡單並且複用度較低的功能其實能夠合併
好比上圖單獨把小學,初高中出題函數拆分爲產生各自產生數字,符號以及總出題函數七個函數反而使代碼複雜度略微增長,代碼過多。
2.具體實現層面(實現思路及細節):
1)代碼思路能夠進一步精簡下,600多行代碼量有點過多。
2)對於每一個老師的文件夾不能自動生成,只能手動建立對於增長或刪除老師等操做時有些不方便。
3)在輸入題目數量時若是一不當心輸入非數字字符會陷入無限循環,因此建議系統輸入最好所有采用string類型,防止因用戶輸入不規範致使整個系統宕機。
4)站在當前小型系統視角,採用每次登錄校驗密碼均需讀取文件的方式會增長I/O的成本,下降速度(固然就像上面說的對於大型系統這則是一個優勢)。
最後的最後,膜下大佬,感受此次互評代碼收穫頗多