Com.urp.command.FileFrameWork(1)
前一陣子做了個JSF的項目,某個學院的一個管理系統。儘管項目用到了sping,用到了hibernate,不過感覺還都只是一些查詢,編輯,添加,刪除。在這家公司一年了,所做的項目都是這樣,也沒跳過槽,不知道外面的世界,不知道別人家是怎麼寫程式的,總決得自己公司寫出來的程式沒有技術含量,沒有架構,模組的概念,有的永遠是一成不變的三層。
畢業剛進公司的時候,看到三層模式,還感覺有點興奮,哦,原來程式可以這麼寫,原來這個就是傳說中的三層模式,頓時對設計人員頂禮膜拜。可現在,設計來設計去,寫來寫去都是一樣的,感覺是一個人就可以搞得定的,怎一個失落了得。想想外面的程式不該就那麼簡單吧,至少在部落格園上面還是有很多東西看不懂的。
不抱怨了,說說自己要寫的吧。項目本身沒有多大的新意,不過自己做的一塊匯入匯出感覺還是蠻有意思的。之前是用java寫的,而且由於是項目緊張的關係,寫的時候也沒有多去想,現在空了,發現還有好多可以改進的地方。
寫的這些東西,不是要來討論匯入匯出該怎麼做,上傳下載要怎麼寫,僅僅是做完項目後的一點個人經驗,望各位看官不要過於嚴肅。
主要功能包括是匯入和匯出。因為是BS結構,所以可能要設計的上傳下載。所以打算先從上傳下載做起。可能有些朋友要跳出來說,我的寫的上傳,在上傳大檔案是會出現問題,所以我要再說一次,這隻是我做項目裡的一點經驗和總結,至少在這個項目裡沒有對於大檔案的需求,對於2,3M的資料庫檔案似乎並沒有出現問題,所以我們暫時不考慮吧。況且如果類和類間關係設計的好的話,再增加這方面需求應該不是難事。
匯入匯出簡化一點看,其實就是下面的兩個過程:
現在完成的上傳部分的類圖:
UploadFileFrame繼承IfileFrame介面,IfileFrame有一個IFileAPI的屬性,和一個Execute的方法。我們希望UploadFileFrame是一個類似面板模式的類,使用者只需要調用一個Execute方法。設想以後的DownloadFileFrame,ImportFileFrame,ExportFileFrame都對外只提供這個方法,取成統一的名字,也是為了將來有程式中可能要採用命令模式,方便一些日誌或者許可權驗證的擴充。
IFileAPI是完成具體類型檔案讀取和寫入,比如是excel,mdb等。因為目前來看,在JAVA中對這些檔案操作,每個需要不同的包,相信C#應該也是這樣。但有部分是統一的,作為2進位檔案的簡單的寫入,建立,刪除應該都是一樣的,所以把這部分放到了LocalFile中去了。類圖如下:
在頁面上利用一個HtmlInputFile控制項,後台代碼調用UploadFileFrame的建構函式,這裡需要傳入一個System.Web.HttpPostedFile,所有的關於上傳檔案的資訊就都在這裡面了。整個上傳的過程就是下面這樣: