Time of Update: 2018-12-07
你有一個資料項目,需要與其他資料和行為一起使用才有意義。將資料項目變成對象。動機:開發初期,你往往決定以簡單的資料項目表示簡單的情況。但是,隨著開發的進行,你可能會發現,這些簡單資料項目不再那麼簡單了。如果這樣的資料項目只有一兩個,你還可以把相關函數放進資料項目所屬的對象裡;但是重複代碼(Duplicated Code)壞味道和 依戀情結(Feature
Time of Update: 2018-12-07
某個類做了應該由2個類做的事。建立一個新類,將相關的欄位和函數從舊類搬移到新類。動機:一個類應該是一個清楚地抽象,處理一些明確的責任。但是在實際工作中,類會不斷成長擴充。你會在這兒加入一些功能,在哪加入一些資料。給某個類添加一項新責任時,你會覺得不值得為這項責任分離出一個單獨的類。於是,隨著責任不斷增加,這個類會變得過分複雜。很快,你的類就會變成一團亂麻。這樣的類往往含有大量函數和資料。這樣的類往往太大而不易理解。此時你需要考慮哪些部分可以分離出去,並將它們分離到一個單獨的類中。如果某些資料和
Time of Update: 2018-12-07
你有一些領域資料置身於GUI控制項中,而領域函數需要訪問這些資料。將該資料複製到一個領域對象中。建立一個Observer模式,用以同步領域對象和GUI對象內的重複資料。動機:一個分層良好的系統,應該將處理使用者介面和處理商務邏輯的代碼分開。之所以這樣做,原因有以下幾點:1)你可能需要使用不同的使用者介面來表現相同的商務邏輯,如果同時承擔2種責任,使用者介面會變得過分複雜;2)與GUI隔離後,領域對象的維護和演化都會更容易,你甚至可以讓不同的開發人員負責不同部分的開發。
Time of Update: 2018-12-07
板橋裡人 http://www.jdon.com 2008/4/14(轉載請保留) 在“物件導向建模與資料庫建模兩種分析設計方法的比較”一文中我們比較了在對需求分析時兩種方法的不同,所謂資料庫建模分析,就是項目一開始就根據需求建立資料庫模型,如資料表結構和欄位等,這種錯誤現象大量普遍存在我們國內項目實踐中,從每年大量招聘啟示中就可見一斑:招聘資料庫建模人員,招聘Java物件導向程式員。這些說明軟體業一邊在大量使用Java/.NET/Ruby on
Time of Update: 2018-12-07
網路中的一台主機如果希望能夠接收到來自網路中其它主機發往某一個組播組的資料報,那麼這麼主機必須先加入該組播組,然後就可以從組地址接收資料包。在廣域網路中,還涉及到路由器支援組播路由等,但本文希望以一個最為簡單的例子解釋清楚協議棧關於組播的一個最為簡單明了的工作過程,甚至,我們不希望涉及到 IGMP包。 我們先從一個組播用戶端的應用程式入手來解析組播的工作過程: #include <stdio.h> #include <sys/types.h>
Time of Update: 2018-12-07
首先引入 w3help的,莫的測試: 原帖地址:http://www.w3help.org/zh-cn/causes/BX1053 w3help的測試,和我的測試相互補充,應該比較完整了.悲劇的是我做完測試後,和莫提了一嘴,他告訴我w3help有啊. 我累個去.咋不早說.我可以省不少事呢. 建議先看看w3help的.內容比較詳細.尤其是據說 window.open,這種宿主方法.居然,可能在將來被html5所統一.期待啊. 瀏覽器實現差異:
Time of Update: 2018-12-07
有時候你會看到2個類過於親密,花費太多時間起探究彼此的private成分。你可以採用Move Method (搬移函數)和 Move Field (搬移欄位)幫他們劃清界限。你也可以看看是否可以運用 Change Bidirectional Association to Unidirectional (將雙向關聯改為單向關聯)讓其中一個類對另一個斬斷情絲。如果2個類實在是情投意合,可以運用 Extract Class
Time of Update: 2018-12-07
你的程式以一個臨時變數儲存某一個運算式的運算效果。將這個運算式提煉到一個獨立函數中。將這個臨時變數的所有引用點替換為對新函數的調用。此後,新函數就可以被其他函數調用。double basePrice = _quantity*_itemPrice; if (basePrice > 1000) { return basePrice * 0.95; } else
Time of Update: 2018-12-07
你從某個對象中取出若干值,將它們作為某一次函數調用時的參數。改為傳遞整個對象。動機:有時候,你會將來自同一對象的若干項資料作為參數,傳遞給某個函數。這樣做的問題在於:萬一將來被調用函數需要新的資料項目,你就必須尋找並修改對此函數的所有調用。如果你把這些資料所屬的整個對象傳給函數,可以避免這種尷尬的處境,因為被調用函數可以向那個參數對象請求任何它想要的資訊。 除了可以使參數列更穩固外,Preserve Whole Object
Time of Update: 2018-12-07
某些參數總是很自然地同時出現。以一個對象取代這些參數。動機:你常常會看到特定的一組參數總是被一起傳遞。可能有好幾個函數都使用這一組參數,這些函數可能隸屬同一個類,也可能隸屬不同的類。這樣一組參數就是所謂的Data Clumps(資料泥團),我們可以運用一個對象封裝所有這些資料,再以該對象取代它們。哪怕只是為了把這些資料群組織在一起,這樣做也是值得的。本項重構的價值在於縮短參數列,過長的參數列總是難以理解的。此外,新對象所定義的訪問函數還可以使代碼更具一致性,這又降低了理解和修改代碼的難度。
Time of Update: 2018-12-07
你有一個類型碼,它會影響類的行為,但你無法提供繼承手法消除它。以狀態物件取代類型碼。動機:本項重構和Replace Type Code with Subclass (以子類取代類型碼)類似,但如果“類型碼在對象生命期中發生變化”或“其他原因使得宿主類不能被繼承”,你也可以使用本重構。本重構使用State模式和Strategy模式。
Time of Update: 2018-12-07
2個類之間有雙向關聯,但其中一個類如今不再需要另一個類的特性。去除不必要的關聯。動機:雙向關聯很有用,但你必須為它付出代價,那就是維護雙向串連、確保對象被正確建立和刪除而增加的複雜度。而且,由於很多程式員並不習慣使用雙向關聯,它往往成為錯誤之源。 大量的雙向串連也很容易造成“殭屍對象”:某個對象本來應該死亡了,卻仍然保留在系統中,因為對它的引用沒有完全清除。
Time of Update: 2018-12-07
一大早就有朋友在說,linux環境上配置雙網卡,有時得得到ip有時不能得到ip 修改了網卡速率就,現在正常了。但是 也不能同時的使用。 在網上找了找資料,寫了一個解決方案如下:一.安裝和配置網路裝置 在安裝linux時,如果你有網卡,安裝程式將會提示你給出tcp/ip網路的配置參數,如原生 ip地址,預設網關的ip地址,DNS的ip地址等等。
Time of Update: 2018-12-07
搜尋了下,幾乎沒有此類軟體,微軟的 VS2010也不支援這個非常實用的功能。其實vs2010下 vc的項目屬性,C/c++的命令列中有命令列,前面加個 cl.exe ,後麵價格檔案名稱,還有連結的時候 前麵價格 link.exe 就可以手動編譯了。但是 GUI 的方法畢竟麻煩,其實從vcxproj就可以獲得這些參數 和 所有的功能。而且 vcxproj是一個xml檔案。只要 將 xml 檔案的一些關鍵資訊提取出來,輸出到 makefile檔案就可以了。需要的庫 有 xml需要的知識有
Time of Update: 2018-12-07
感謝vlc研究群的gg-Ak47童鞋的幫忙,雖然很據他給我講的我沒有搞定。 Contrib庫都是官網提供的,如果有些代碼調用的第三方庫,我們調試修改起來就很麻煩。Jeremiah最近再調試vlc的rtsp方面的東西,編譯了live555的庫,替換掉官網提供的Contrib裡面關於live方面的庫,vlc編譯通過,實現了對第三方庫的修改。在此共用,提供一個思路,其他的庫,以此類推。測試環境:1. cygwin-new(20081208)2. vlc-0.9.9a3. contrib-2009
Time of Update: 2018-12-07
在實現了newform的2個頁面的功能以後,為了完善產品的人性化,我在第2個頁面上增加了一個顯示前面已經選擇的路徑和模板名稱的功能。但是這裡就遇到了一個問題,如果萬一使用者選擇的路徑和名稱都太長了,那麼下面在顯示的時候就會截斷,這就很不爽了。 別看這個小問題,這就涉及了2個技巧。1. 讓QLabel自適應text的大小,直接用下面的代碼:LabelName->adjustSize();2. 讓QLabel能夠自動判斷並換行顯示:LabelName->setGeometry(
Time of Update: 2018-12-07
3.6、ipvs資料包發送IPVS串連中的資料包的發送方法是由ip_vs_bind_xmit()(net\netfilter\ipvs\ip_vs_conn.c中)函數定義的,具體的發送資料包處理函數定義在net\netfilter\ipvs\Ip_vs_xmit.c檔案中intip_vs_nat_xmit(struct sk_buff *skb, struct ip_vs_conn *cp, struct ip_vs_protocol
Time of Update: 2018-12-07
Qt中使用stylesheet方式將按鈕設定成圓角按鈕,代碼如下:setStyleSheet("border:2px groove gray;border-radius:10px;padding:2px 4px;");如pushButton如下用法:pushButton->setStyleSheet("border:2px groove gray;border-radius:10px;padding:2px
Time of Update: 2018-12-07
基於預測的文法分析器,一個明顯的特點就是將非終結符定義為解析函數(方法),當非終結符號可以派生為其他非終結符號時,在解析函數中遞迴調用即可。這種方法的一個缺點,是難以處理需要回溯的情形,後面我們再詳細分析。上次我們研究了諸如CR、LF、HTAB等單個字元的解析,這一篇來看看稍微複雜一點的多個符號串連的情形,包括CRLF和RULE兩個符號。/* This file is one of the component a Context-free Grammar Parser Generator,
Time of Update: 2018-12-07
相關架包:http://download.csdn.net/detail/qm4050/5531483代碼如下: import java.io.File;import lotus.domino.Database;import lotus.domino.Document;import lotus.domino.Item;import lotus.domino.NotesException;import lotus.domino.NotesFactory;import