一、基礎技術選型
C# .NET 3.5/4.0 這兩個版本的.NET已經相當方便(Linq, Lambda,Parallel),語法簡潔,配合WCF和WF兩項技術,可以滿足快速開發,維護方便的目標。
Win Form 因ERP項目涉及大量的表單(Entry),查詢(Enquiry),報表(Report),我以為WinForm仍然是首選技術。自定義控件,數據綁定,自定義窗體,這三項技術組合起來可產生無窮的威力。
SQL Server 2005 取兼容性最好的一個版本。2008/2008 R2/2012均不向后兼容,舊版本數據一旦附加到新版本中后,便不可以在舊版本的SQL Server中附加,備份集也不可以向后兼容。
二、五大核心模塊
為保持ERP產品的可配置性,可維護性,首先定義以下基礎模塊,構建基礎的ERP功能集合。這些基礎模塊是我從工作中接觸到的幾個ERP產品中總結出來,具備代表性。
菜單設計器 Menu Designer ERP項目的菜單,導航應該具備可編輯,可調整的特性。菜單和導航數據一般保存於數據庫中,或是Xml文件中。
查詢設計器 Query Designer ERP項目涉及大量的數據表單,數據查詢的需求非常頻繁。SQL Server Management Studio是開發人員的查詢設計器,在此基礎上做一個封裝,限定可查詢的數據庫和資料表,考慮查詢權限,拒絕任意的數據修改和刪除語句片段以保護數據,最后將數據以列表或網格形式呈現。
報表設計器 Report Designer 同查詢的需求一樣,如果需要將數據打印成完整的格式,ERP項目應該具備增加自定義報表的特性。兼容當前流行的Crystal Report和Reporting Services。
工作流設計器 Workflow Designer ERP項目有內建的約定的流程,同時也應該滿足批核,通知等特性。
窗體設計器 Form Designer ERP項目應該具備調整和自定義布局的特性。不同的權限和用戶,所看到界面應該有所差異。借助於此窗體設計器,調整窗體布局,滿足個性化布局的需要。
三、實體映射框架層模式
1 Entity Framework , LLBL Gen,NHibernate
ORM的基礎原理是在數據庫與面向對象編程中的對象之間做一層封裝,以簡化數據讀寫。在性能的反應上,ADO.NET是最好的,它直接工作在數據庫驅動層上。ORM則在ADO.NET上做一層封裝。關於可維護性,代碼生成器可彌補ORM對數據庫修改的感知。當發生數據庫變更時,直接以生碼生成工具重新生成實體代碼即可。關於可編程性,強類型的對象,可滿足數據綁定時的數據感知需求,節省開發和維護時的成本。
2 ORM高級查詢,SQL語句追蹤,性能優化
應用ORM做數據訪問層的難點在於數據查詢,拋棄現有的SQL語句知識,應用OOP語言來做查詢,十多行代碼是為達到一個子查詢的目的,一句SQL語句可替代。涉及數據問題時,還需要借助於SQL Server Profiler工具來診斷問題。
四、界面層模式
1 自定義控件,窗體基礎類型定義的原理與實現,數據綁定技術
以WinForm技術而言,繼承是為代碼重用的重要收益。定義以下幾個基礎窗體
Entry Form:數據輸入窗體,比如銷售單,采購單,工作單。
Enquiry Form:數據查詢窗體,比如銷售單日記帳查詢,采購送貨查詢。
Report Form:報表窗體,讀取報表的參數信息,從數據庫中抓取數據並呈現報表。
自定義控件是為滿足數據綁定的需要,還增加其它特性,比如限制輸入長度,只讀,可寫,大小寫,半角全角自動轉化等控制。
2 業務邏輯與業務驗證
應用ORM編程帶來的一大收益是界面與邏輯分離。OOP對象既可代表數據庫中的表在內存中的實體,也可包含豐富的自定義邏輯,再加上驗證框架,這二項內容的分離和耦合,極大的增強代碼的可維護性。
ASP.NET MVC已經強制模型M和界面V的分離,用控制器將它們聯系在一起,在數據呈現和數據邏輯方面,相對於Web Form無論是開發,還是維護都輕松很多。
五、功能開發模式
1 框架數據庫與業務邏輯數據庫,定義代碼模塊(Module),定義功能(Function)
因為多增加一個數據庫框架,與系統通用功能相關的信息都放置於框架數據庫中,比如帳套配置,比如查詢定義,比如菜單和導航信息。框架數據庫承擔系統方面的功能載體,與具體的業務功能分離。
2 窗體界面設計 查詢(Enquiry)和查找(Lookup)設計,業務邏輯,驗證
在第二項內容(五大核心模塊)的基礎上,ERP項目繼續以插件的方式,定義模塊,定義功能。一個模塊可以簡單的理解為一個Visual Studio 項目文件,相關的功能都聚集在其中。銷售Sales模塊中有報價單,銷售單,銷售送貨,銷售退貨等功能。
模塊中的功能,以第四項內容中提及的方法分三類Entry,Enquiry,Report三大基礎業務功能。
此項內容為ERP開發中的日常任務。以ERP的任務分類,Enhancement,Bug Fix,Data Fix三大分類,絕大多數的任務均在此目錄中。因Bug帶來的數據修復,會給ORM技術團隊帶來壓力。系統產生的數據問題,不再是可以簡單的從系統中拷貝一些SQL語句,ORM做為基礎的數據訪問沒有SQL。以我的體會,ORM並不是要你忘記SQL的存在,在應用ORM保存數據之后,我常會以SELECT * FROM table之類的語句去審查數據表中的記錄,以確保數據值和數據驗證,數據關聯為正確。
六、開發工具推薦
SQL Toolbet SQL Server領域中的Intellisense,好比Visual Studio中的智能提示一樣,必備工具。
JetBrain Resharper 當實體與實體間的關系,接口與實現的關系日益復雜之后,Find Usage和Go to Implementation兩項功能,可幫助診斷問題,必備工具。
Resharper的Test功能也相當優秀,直接對一個測試方法啟動調試,我對單元測試的熱愛,源自於此功能。做好一個基礎功能,會同樣做一個測試方法,以此功能調試跟蹤,觀測代碼的執行。
Code Smith 輔助代碼生成工具,必備工具。具備大量的例子,入手容易,案例多,應用廣泛。