看到電腦上一張張美麗的航片的時候,終于是出來哦,哎!最近忙活了大半個月俺終于還是把這個工具整出來了哦。回想起來開發這個工具的時候的種種,說實話 真是折磨人哦,幾易其稿,系統的架構就改過好幾次哦,基本上是一個星期改一次。
在這個過程中收獲還是不少的哦,痛并快樂著,不能不佩服老大的架構的思想,在英明神武的老大的指導下開發出一個基本上比較符合面向對象的軟件,其中的編程思想的沖擊是巨大的哦,顛覆了我以前做程序的很多固有觀點。
首先來說說該工具的需求,對已有的大尺寸的航片進行切割,切割出給定寬高的航片,在提層合并航片。具體來說就是如果有一張1024 * 1024的航片切割成8 * 8張 128*128大小的航片為第零層,提層比率為2,則第1層就是原航片的256*256大小的,但是要保存為128 *128的航片 這樣的航片有4 *4張,依次類推,第2層 第 3層...,還有這些航片的編號以LLXXXYYY編號,坐標原點為航片左下角,ll為層數,XXX為X軸上航片編號,YYY為Y軸上的航片的編號。
剛開始聽到這個需求的時候確實是沒有什么頭緒,研究了一下libtiff就開始搞了哦,剛開始的時候很快就把航片的讀寫搞定了,以為會很快就解決問題啦,悶著頭在那里狂寫代碼,第一版交給老大,被鄙視的不行哦,首先因為需求沒有理解清楚,自己理解的圖像編號和老大所說的圖像編號的順序不同哦,回過來改代碼發現居然無從下手,還有就是老大要生成航片處理的結果,也無法在代碼中體現。說實話當時心里還是比較嘀咕的,覺得老大交代問題沒有交代清楚,后來老大說的一句話還是比較有道理的,客戶的需求是不斷變化的,你要是想讓用戶來適應你的設計是不可能的,你的設計應該是自適應的,能夠應對客戶不斷變化的需求。聽完這句話,只有無語接著在那里寫代碼,等我寫的七七八八了,老大有空看了一下我的代碼,繼續鄙視我哦,為何?模塊劃分不清,UI層中有太多航片處理的邏輯,航片處理模塊中也有太多的航片編號的邏輯。一句話 整個代碼只是為做實現這個功能,毫無擴展性,如果以后在在上面添加功能基本上是沒有可能。
哎!老大當時這樣說了,讓我修改代碼,當時真是想死的心都有了哦,修改也不知道怎么下手,和老大探討了半天,終于是定下了架構,呵呵當然啦,主要還是老大定的架構。這次交流收獲還是不少的哦。
做軟件首先應該定下的是輸入和輸出,確定數據的流向。從UI層定義輸入,確定盡可能少的輸入參數,從輸出確定數據,輸入參數到輸出之間確定數據的流向,對數據的流向進行功能上的劃分,確定不同的模塊,模塊之間盡可能少的耦合性,如果一個數據和操作是相互關聯的則可以視為一個對象,對象的設計應該考慮到擴展性,盡可能的從一個基類派生,為以后擴展提供基礎,使用工廠模式來確定不同的對象。還有就是UI與底層數據處理模塊應該沒有關聯,通過一個處理模塊來出來UI和底層模塊之間的交換。
哎,這樣做下來,我的工具有5個模塊,一個處理編號生成的模塊A,一個參數保存的模塊B,一個處理航片讀寫的模塊C,一個生成切割航片的模塊D,一個與UI交互和與底層交互的模塊E,它們之間的依賴關系為 E依賴于A D, A依賴于B, D依賴于C,這樣模塊間依賴清楚,接口也定義的明確。
收獲哦!有一種豁然開朗的感覺,以后有機會獨立開發的時候應該多想想這樣的問題,爭取早日有所成就哦!