原创 mongodb——curd的其他知識點

這篇博客,我們來介紹幾種查詢的騷操作。 投影(projection)——返回指定的字段 在mongodb的查詢中,可以通過一個bson來指定在這個查詢裏返回的字段。如果不指定,則默認全部返回。bson的格式如下: { field1

原创 重構手法列表——大型重構

梳理並分解集成體系(Tease Apart Inheritance) 現象:某個繼承體系同時承擔兩項責任 動機:混亂的繼承會使得修改變得困難,並使得代碼難以理解。此外這種不好的現象也極容易蔓延(添加很多很多的子類) 做法:建立兩個繼承

原创 重構改善既有代碼的設計學習筆記——重構中的tips整理

重構原則 如果你發現自己需要爲程序添加一個特性,而代碼結構使你無法很方便地達成目的,那就先重構那個程序,使特性的添加比較容易,然後再添加特性 重構前,先檢查自己是否有一套可靠的測試機制,這些測試必須有自我檢驗能力 重構技術就是以微笑

原创 重構手法列表——簡化條件表達式

分解條件表達式(Decompose Conditional) 現象:有一個複雜的條件語句 動機:有複雜的條件表達式會使代碼可讀性下降 做法:從if then else三個段落中分別提煉出獨立函數 合併條件表達式(Consolidate

原创 重構手法列表——處理概括關係

字段上移(Pull Up Field) 現象:兩個子類擁有相同的字段 動機:去除重複聲明;去除重複行爲 做法:將該字段移至超類 函數上移(Pull Up Method) 現象:有些函數,在各個子類中產生完全相同的結果 動機:去除重複行

原创 重構手法列表——簡化函數調用

函數改名(Rename Method) 現象:函數的名稱未能揭示函數用途 動機:一個好的名稱對程序解釋起到非常大的作用 做法:修改函數名稱 添加參數(Add Parameter) 現象:某個函數需要從調用端得到更多的信息 動機:需要信

原创 重構手法列表——重新組織數據

自封裝字段(Self Encapsulate Field) 現象:直接訪問一個字段,但與字段之間的耦合關係逐漸變得笨拙 動機:當直接訪問類裏面的字段不能滿足需求時(比如需要延遲初始化),可以通過封裝方法來獲取字段 做法:爲這個字段設置

原创 重構手法列表——在對象之間搬移特性

搬移函數(Move Method) 現象:有函數與其所駐類之外的另一個類進行更多交流:調用後者或被後者調用 動機:兩個類並無太多合作,但是出現了高度耦合。 做法:在該函數最常引用的類中建立一個有着類似行爲的新函數。將舊函數變成一個單純

原创 重構改善既有代碼的設計學習筆記——代碼壞味道整理

重複代碼 過長函數 過大的類 過長參數列 發散式變化:應對外界某一個變化時,某一類需要修改的東西太多 霰彈式修改:應對外界某一個變化時,需要修改很多很多的類 依戀情結:A類中的方法對於B類感興趣的程度超過A類本身 數據泥團:在很多地

原创 重構手法列表——重新組織函數

提煉函數(Extract Method) 現象:有一段代碼可以被組織在一起並獨立出來 重構動機:粒度小的函數,複用性比較高;會使得高層函數看起來就像註釋一樣;細粒度的函數,複寫起來比較容易 做法:根據函數的意圖來命名新的函數,重點在於

原创 分佈式架構設計學習筆記——架構演變過程

好久沒有寫博客了,原因是啥呢?沒錯,就是懶。不過作爲一個程序員學習是不能停止滴,這一系列的筆記我之間都是記錄在某筆記軟件上的,所以這一系列可能會發的比較快,但是可能有些語無倫次(畢竟都是ctrl+c,ctrl+v)~ 總的說起來,服務

原创 大話設計模式學習筆記(13)——建造者模式

源碼git地址 https://github.com/dlovetco/designMode 問題提出 捏兩個小人一個胖一個瘦。必須要有頭 身體 四肢。 這個場景的主要特點在於我們需要保證這個小人的穩定性, 即必須保證有客戶端在建造小人的