公用程式

可以重複使用的公用程式

系統開發是一個累積的過程,累積的不是經驗而是公用程式,你也可以叫它做模組、軟體積木。在形式上,它可能是一個簡單的函數、一個類別,或是一個包裝完整的元件,其主要目的就是減少重複的工作,讓系統變得簡單、容易維護。

在建立這些公用程式的過程中,我們會專注在2個原則:第一是它不包含商業規則,第二是日後的維護和擴充必須簡單。關於第二點,隨著時間的累積,這些程式會愈來愈多,所以必須先有一個清楚的架構,日後才不會造成混亂。如果你打算從事程式設計工作很長一段時間,那麼你應該從現在開始累積自己的公用程式,一般這會需要三到五年的時間,或是你也可以花點時間了解這裡所介紹的內容,把它變成自己的模組,就可以省下這些時間。

要了解這些模組最簡單的方式,就是看看他們包含哪些檔案,以及這些檔案的用途是什麼,在這裡我們的公用程式主要是以下這2個 project:

• Base:包含所有與網站無關的底層程式
• BaseWeb:與網站有關的底層程式

Base Project 

包含以下3個目錄:
1.Enums: 包含數字和文字兩種 列舉的資料型態
2.Models: 包含自行定義的資料型態, 以類別的形式存在
3.Services: 包含三種服務類別, 底線開頭 的士 靜態類別,I 字母開頭的事 interface, 其他的則是一般的服務, 這個目錄是公用程式的主要內容, 檔案的說明如下:

• _Array.cs: 處理陣列資料
• _Datatable.cs:處理 jQuery Datatables 
• _Date.cs: 處理日期資料
• _Db.cs:存取資料庫 (ADO)
• _Excel.cs:存取 Excel 檔案
• _File.cs: 處理檔案資料
• _Fun.cs: 最底層的公用類別
• _Guid.cs:處理 GRUD 資料
• _Json.cs:處理 Json 資料
• _Linq.cs:處理 Linq 資料
• _List.cs:處理 List 資料
• _Log.cs: 寫入log
• _LogTime.cs: 記錄執行時間
• _Mail.cs: 處理郵件
• _Model.cs:處理 Model 資料
• _Num.cs:處理數字資料
• _Object.cs:處理 Object 資料
• _Prog.cs: 處理系統功能
• _Sql.cs:處理 sql 資料
• _Str.cs:處理字串資料
• _Test.cs: 系統測試
• _Time.cs: 處理時間資料
• _Valid.cs: 資料驗證
• _Var.cs:處理變數資料
• _Word.cs:存取 Word 檔案
• _Xml.cs:處理 Xml 資料
• BaseResService.cs: 存取基礎類別的多國語資料
• BaseUserService.cs: 存取登入者基本資料
• CrudEdit.cs:CRUD 的編輯畫面
• CrudRead.cs:CRUD 的清單畫面
• Db.cs:存取資料庫 (ADO)
• ExcelExportService.cs: 匯出Excel
• ExcelImportService.cs: 匯入Excel
• FnDelegate.cs: delegate 函數清單
• IBaseResService.cs: interface
• IBaseUserService.cs: interface
• WordImageService.cs: 處理 Word 圖檔
• WordSetService.cs: Word 套表

BaseWeb Project

包含以下3個目錄:
1.Attributes:controller 上的自定 filter,或是 model 上的 validation
2.Services:公用程式的主要內容,說明如後
3.ViewComponents:自定元件,說明如後

Services 目錄的檔案清單如下:

• _Cookie.cs:處理 cookie
• _Device.cs:存取硬體設備資訊
• _Flow.cs:處理流程資料
• _GoogleAuth.cs:處理 google 認證
• _Helper.cs:處理 view component 
• _Html.cs:處理 Html 資料
• _Http.cs:處理 Http 資料
• _Locale.cs:處理多國語資料
• _Web.cs:最底層的 Web 公用類別
• _WebExcel.cs:存取 Excel 檔案
• _WebFile.cs:存取檔案
• _WebSafe.cs:處理資安問題
• _WebWord.cs:存取 Word 檔案
• FlowEdit.cs:流程編輯畫面
• FlowRead.cs:流程清單畫面
• ILocale.cs:interface
• XpCmsEdit.cs:CMS 編輯畫面
• XpCmsRead.cs:CMS 清單畫面
• XpImportRead.cs:匯入 Excel 清單畫面 

ViewComponents 目錄的檔案清單如下:

• XgAddRowViewComponent.cs:新增一列按鈕
• XgCreateViewComponent.cs:新增按鈕
• XgDeleteRowViewComponent.cs:刪除一列按鈕
• XgDeleteUpDownViewComponent.cs:刪除、上移、下移按鈕
• XgExportViewComponent.cs:匯出按鈕
• XgFindTbarViewComponent.cs:查詢功能 Toolbar
• XgLeftMenuViewComponent.cs:左側 menu
• XgOpenModalViewComponent.cs:Modal 編輯多行文字
• XgProgPathViewComponent.cs:功能路徑
• XgSaveBackViewComponent.cs:儲存、回上一頁按鈕
• XgThViewComponent.cs:table 表頭欄位
• XgToolViewComponent.cs:小工具,包含:MessageBox、Alert、Confirm畫面
• XiCheckViewComponent.cs:Checkbox 欄位
• XiDateViewComponent.cs: 日期欄位
• XiDtViewComponent.cs: 日期時間欄位
• XiFileViewComponent.cs: 上傳檔案欄位
• XiHideViewComponent.cs: 隱藏欄位
• XiHtmlViewComponent.cs: Html 欄位
• XiLinkFileViewComponent.cs: 檔案連結欄位
• XiNumViewComponent.cs: 數字欄位
• XiRadiosViewComponent.cs: Radio 欄位
• XiReadViewComponent.cs: 唯讀欄位
• XiSelectViewComponent.cs: 下拉欄位
• XiTextAreaViewComponent.cs: Textarea 欄位
• XiTextViewComponent.cs: 文字欄位

除此之外,HrAdm/wwwroot/js/base 目錄也包含以下的公用 javascript:

• _ajax.js:ajax呼叫
• _array.js:處理陣列資料
• _assert.js:用於測試
• _browser.js:讀取 Browser 資訊
• _btn.js:控制按鈕
• _chart.js:處理統計圖表
• _crud.js:CRUD操作
• _date.js:處理日期資料
• _edit.js:CRUD編輯畫面
• _error.js:錯誤處理
• _file.js:處理檔案資料
• _form.js:處理表單資料
• _formData.js:處理 FormData 資料
• _fun.js:最底層的公用類別
• _html.js:處理 Html 資料
• _ibase.js: 所有輸入欄位的基礎類別
• _icheck.js:CheckBox 欄位
• _icolor.js: 選取顏色欄位
• _idate.js: 日期欄位
• _idt.js: 日期時間欄位
• _ifile.js: 上傳檔案欄位
• _ihtml.js: HTML欄位
• _ilinkFile.js: 檔案連結欄位
• _input.js: 存取輸入欄位
• _iradio.js:Radio 欄位
• _iread.js: 唯讀欄位
• _iselect.js: 下拉欄位
• _itext.js: 文字欄位
• _itextarea.js:Textarea 欄位
• _json.js:處理 Json 資料
• _leftmenu.js:存取左側功能表
• _locale.js:處理多國語資料
• _log.js:log 處理
• _modal.js:處理 Modal
• _nav.js:處理 Nav
• _num.js:處理 數字資料
• _obj.js:處理 Object 資料
• _pjax.js:Pjax 控制
• _prog.js:存取系統功能
• _qrcode.js:處理 Qrcode 資料
• _str.js:處理 字串資料
• _switch.js: 畫面切換
• _tab.js:處理 Tab 資料
• _table.js:處理 Table 資料
• _tool.js:小工具,包含:MessageBox、Alert、Confirm畫面
• _valid.js: 資料驗證
• _var.js:處理變數
• Datatable.js:處理 jQuery Datatables 資料
• EditMany.js:處理多筆編輯畫面
• EditOne.js:處理單筆編輯畫面
• Flow.js:處理簽核流程資料