文章目錄
總結一下做管理軟體,有哪些項是經過檢驗的條款,必須遵守的。
介面篇
1 要儲存使用者的偏號(profile/favourite)。 ASP.NET 2.0引入此功能,當使用者修改預設的控制項的屬性時,架構應當儲存使用者的修改。顯而易懂的例子是grid控制項中的列順序。使用者修改之後,關閉表單時,要可以儲存起來,當使用者再次開啟時,應當載入使用者上次的修改。
2 介面中的資料要有通一的匯出方案。匯出類型一般是Mircrosoft Excel, Microsoft Access, Text,CSV。Excel為第一需要考慮的匯出格式。
3 半形全形輸入轉化。對於全形輸入,應當轉化為半形。全形半形長度不一樣,但在介面中它的字元是一樣的,應當預設的將使用者全形的輸入轉化為半形。或是直接提示使用者切換IME,不允許全形輸入。
4 使用標準的流行的報表開發技術和設計工具。自訂報表設計師很難控制穩定性,fyireport就是這樣,即使有新功能也很難加入。再次,它的學習成本也比較高。推薦直接選擇Crystal Report或是Reporting Services。
Crystal Report一直都沒有大的改動,Reporting Services因為SQL Server昂貴的授權費用,因而產生了一些優秀的報表工具。但我仍然推薦用成熟的Crystal Report技術。
5 做好系統的三個門面表單: Login, Splash,About。
登陸視窗的背景色要與主表單一致,給使用者的第一感覺的地方,要以穩重為主。我選擇以微軟網站的藍色基調為主色。
Splash顯示當前的程式的版本,授權使用者資訊。About對話方塊中顯示license資訊,以及客戶服務連絡方式。
6 介面中調用一項系統服務時,應該先檢查它是否存在。比如即將顯示報表介面,應當先檢測報表格服務是否存在,進行環境檢測。運行事務時,應該先檢測MSDTC服務是否已經啟動。以.NET 4.5 為Target產生程式版本時,需要先檢測.NET 4.5是否已經安裝。
7 保持與伺服器的串連,斷線後要禁用使用者輸入。這需要引入心跳機制。
資料庫篇
1 給每個日記帳表添加額外的五個欄位。用來儲存這筆記錄的建立人,建立時間,最後修改時間,修改日期:
Created_By, Created_Date, Revised_By, Revised_Date
另一個欄位是為維護資料(data fix)時,方便使用:添加一個自增列,identity(1,1) ,設定為每一個表的第一列。名字可以是RECNUM(record number), LineNO(line number) 等等。
2 統一的資料位元數方案。比如
行號類: LineNo/EntryNo/RecordNo/Recnum 不顯示小數點,
數量類:Qty/Quantity 6位小數
金額類:Amt/Amount 4位小數
3 對於通用的資料表,比如物料主檔,客戶主檔,供應商主檔,應該保守的留20個備用欄位,以供客戶填寫自訂的資訊。再完善的資料庫欄位,都有可能考慮不周到的地方。20個備用欄位,應該可以滿足大部分需求。
4 修改資料庫定序,一般預設為USA標準的SQL_LATING_CP1_CI_AS。這樣可以減少預存程序出錯的機率。
另外,在安裝SQL Server時,也要選取這個定序。
加密保護篇
1 使用者登陸表中的密碼,不能以明文儲存。可以用鹽或是MD5加密,或是可逆的加密,或是字串混淆(比如給每個字元都加一定規則的字串,到檢測密碼時,再反過來還原密碼)。
2 提供幾種方式的使用者驗證機制。認證類型:PASSWORD, DOMAIN。
傳統的密碼驗證需要輸入密碼,如果改成域DOMAIN驗證,不用輸密碼,根據目前使用者直接登陸系統。
3 完善的license許可授權機制。虛擬機器檢測,硬體檢測,到期時間檢測,功能限制檢測,試用版到期檢測。
4 混淆.NET程式集,增加反編譯難度。
程式開發篇
1 提供通用的跟蹤機制解決方案。比如應有Debug.WriteLine輸出跟蹤資訊,再截獲這個輸出,顯示到log viewer程式中。或是應用UDP連接埠發送跟蹤資訊,再捕獲顯示到介面中。下面的代碼可做參考
Trace.Listeners.Add(new TextWriterTraceListener("TextWriterOutput.log", "myListener"));Trace.TraceInformation("Test message.");// You must close or flush the trace to empty the output buffer.Trace.Flush();
2 提供通用的附件管理功能。附件可以上傳到資料庫中,也可以直接儲存一個路徑引用。同時,需要寫一個附件瀏覽器,可查看所有的帶附件的功能的內容。
3 介面中Tab鍵的順序要合理,遵守從上到下,從左至右的順序。還可以做到Enter轉成Tab,斷行符號間轉成Tab鍵。
4 原始碼中,數字類型的值的格式要統一。0x開頭的16進位,預設的是10進位。這兩個格式應當統一。可以使用Windows 7的計算機功能實現快速修改一個16時制數為10時制數。
5 提供標準的資料操作功能。
資料存檔(Archieve):可以把資料匯出為EXCEL或是其它的格式
資料清理(Cleanup):可以清除資料表
資料再開始(Restart):只清除日記帳資料,而保留系統設定和主檔資料
資料匯入(Load): 從備份檔案中載入資料,相當於匯入資料。
6 介面上長時間的操作,要轉成後台線程。介面中可以有BackgroundWorker,代碼邏輯中,應該調用System.Threading.Thread的後台線程來計算。與此同時,介面中的游標也需要改變
this.Cursor=Cursors.WaitCursor;...... long operationthis.Cursor=Cursors.Default;
7 經常留意代碼效率改善方法,並把它應用到系統中。舉例如下
1) 不要用string ax=”” 判斷ax是否為空白, ax.Length==0的效率高於ax==string.Emptyu 一般用as.IsNullorEmpty
2) 對於不改變的變數,用常量代替
3) 用Linq代替大量的foreach查詢
4) MyType t=(MyType) t和t as MyType的效率比較
5) List<T>代替Array,Haset<T> ,Dictionary<K,V> 代替Hashtable