2018/04/27

SampleCMS 網頁共用元件說明:簡介

在製作 ASP.NET Web Forms 網頁程式時,如果遇到多個網頁程式都會寫到的重覆功能,常用的做法就是將這項目功能從這些網頁程式中抽出並且放在一個共用的父類別 BasePage 之中,讓所有網頁程式都繼承自 BasePage,共用 BasePage 裡面的功能。

以我的例子來說,我喜歡把四散在網站中所有網頁程式裡的 Request.QueryString["Id"], Request.QueryString["name"] 包裝成屬性 int qsId, string qsName。
(另外,Session["Param"] 和 ViewState["Param"] 也是)

會這麼做的起因是為了弱點掃描,當初為了要針對 QueryString 參數值撰寫白名單機制,在統計 Request.QueryString["xxx"] 全部有多少參數名稱、各是什麼樣的類型的時候,覺得四散在程式裡的相同參數名稱太多,而且 QueryString[] 很自由的讓參數名稱不用區分大小寫導致同名參數有不同的大小寫在不同的地方,覺得維護時不好讀。

2018/04/25

SampleCMS 網頁內容發佈系統元件說明:元件提供的功能與使用方式

網頁內容發佈系統為 SampleCMS 內部的兩大子系統之一(另一個為帳號與權限系統),在系統設計說明開頭 前言 內文提到的 SampleCMS 主要提供的功能 之中,除了帳號與權限管理,其他功能都屬於這個子系統。

本篇說明系統邏輯層中的網頁內容發佈元件所提供的功能,以及呼叫者端(展示層的網頁程式)如何使用這個元件。

2018/04/24

SampleCMS 帳號與權限系統元件說明:客製化權限判斷

接續上一篇 元件提供的功能與使用方式 結尾提到的,(帳號設定頁)"使用的方法 CanEditThisPage() 之所以不用傳入擁有者資訊是因為管理頁共用元件實作了介面 ICustomEmployeeAuthorizationResult,透過實作的介面方法 InitialAuthorizationResult(bool isTopPageOfOperation, EmployeeAuthorizations authorizations) 將擁有者資訊交給了帳號與權限元件",本篇繼續說明介面 ICustomEmployeeAuthorizationResult 的作用以及需負責的工作。

2018/04/20

SampleCMS 帳號與權限系統元件說明:元件提供的功能與使用方式

上一篇 帳號與權限規則說明 提到了授權範圍的定義以及後台網頁程式如何達成權限判斷,而系統邏輯層中的帳號與權限元件就是依照帳號與權限規則設計。

接下來繼續說明帳號與權限元件所提供的功能,以及呼叫者端(展示層的網頁程式)如何使用這個元件。

2018/04/19

SampleCMS 帳號與權限系統元件說明:帳號與權限規則說明

SampleCMS 帳號與權限系統的設計以員工身份(以下簡稱身份)為主軸,帳號登入後台之後能夠使用後台左側選單中的哪些作業選項取決於帳號屬於哪一個身份,管理者需事先設定身份能否使用以及怎麼使用系統中的作業選項
*作業選項有哪些?例如「帳號管理、身分權限管理、後端操作記錄、網站架構管理...等」。

以下說明授權給身分使用的範圍定義,

2018/04/17

SampleCMS 資料層元件說明:客製化指令資訊類別 (DataAccessCommandInfo)

前一篇提到如何透過四個步驟來建立資料層中用來存取指定 Stored Procedure(以下簡稱 SP)的指令資訊類別 (DataAccessCommandInfo) 。

接下來要繼續說明如何客製化指令資訊類別,例如:我想直接在資料層寫 sql script、我想在資料層開啟交易執行多個 SP。

2018/04/14

SampleCMS 資料層元件說明:依照 Stored Procedure 建立基本的指令資訊類別 (DataAccessCommandInfo)

寫程式的過程中,我對於需要大量重覆編寫相同格式的程式碼難免會覺得枯燥乏味,例如在撰寫資料庫存取功能,已經花時間在資料庫寫好了取得員工資料的 Stored Procedure(以下簡稱 SP),接著還要再去資料層函式庫又寫一個取得員工資料的類別,寫的內容就像是換個格式重寫一樣的 SP 名稱與參數名單,難免覺得浪費了更多時間。

個人覺得寫程式最快的方式就是「複製、貼上、修改」,但前題是複製的來源程式碼最好是整理過的,不然很可能變成 -複製混亂、貼上混亂、修改更混亂-,造成後續維護的麻煩。

針對指令資訊類別 (DataAccessCommandInfo),我把開發過程中自己常用的格式整理成一份 DemoCommandInfos.cs (放在資料層函式庫的 namespace Common.DataAccess.DemoCommandInfos,只是方便自己需要時隨時打開來用),
以下說明,

2018/04/13

SampleCMS 資料層元件說明:指令執行者 DataAccessCommand 運作方式說明

前一篇提到"將指令資訊物件 (cmdInfo) 丟給指令執行者 (cmd) 去執行取回填入資料的 DataSet,執行過程中指令執行者 (cmd) 會自動抓取指令資訊物件 (cmdInfo) 的成員變數,依照成員變數的名稱,將其值傳送給 SP 的同名參數",現在我們一起來看看指令執行者是如何依照指令資訊物件的描述去資料庫執行 Stored Procedure(以下簡稱 SP)。

2018/04/12

SampleCMS 資料層元件說明:基本的呼叫方式

SampleCMS 的資料存取幾乎都是透過事先寫好的 Stored Procedure(以下簡稱 SP)。
(讀取資料用的 SP 名稱為 dbo.spTableName_GetData 或是 dbo.spTableName_GetList、
 新增用的 SP 名稱為 dbo.spTableName_InsertData、
 更新用的 SP 名稱為 dbo.spTableName_UpdateData、
 刪除用的 SP 名稱為 dbo.spTableName_DeleteData)
因此本系統的資料層元件是以執行 SP 做為主軸來設計,
以下說明基本的呼叫方式,

SampleCMS 系統資料表說明

SampleCMS 系統資料表,以功能區分為兩大類,「帳號與權限系統」與「網頁內容發佈系統」。
以下說明,

SampleCMS 系統組件關聯圖

SampleCMS 內容管理系統為三層式架構設計,以功能區分為兩大類,「帳號與權限系統」與「網頁內容發佈系統」。

下圖為系統組件關聯圖,以下說明:

SampleCMS 系統設計說明:前言

SampleCMS 是一個基本款內容管理系統 (DemoSource),是我在最近7年工作的過程中將各個前輩留下來的內容管理系統整理、歸納、簡化與重新設計後的結果。在此感謝先得利資訊讓我進入製作內容管理系統的領域,讓我能夠看到以及參與製作各式的內容管理系統;感謝叡揚資訊讓我有機會接觸與學習不同的系統架構設計方式,增加了我在物件導向程式設計的經驗。

回題,
SampleCMS 主要提供的功能如下:

SampleCMS 系統設計說明:目錄

1. 前言
2. 系統組件關聯圖
3. 系統資料表說明
4. 資料層元件說明
4-1. 基本的呼叫方式
4-2. 指令執行者 DataAccessCommand 運作方式說明
4-3. 依照 Stored Procedure 建立基本的指令資訊類別 (DataAccessCommandInfo)
4-4. 客製化指令資訊類別 (DataAccessCommandInfo)
5. 帳號與權限系統元件說明
5-1. 帳號與權限規則說明
5-2. 元件提供的功能與使用方式
5-3. 客製化權限判斷
6. 網頁內容發佈系統元件說明
6-1. 元件提供的功能與使用方式
6-2. 自訂帳號授權結果
7. 網頁共用元件說明
7-1. 簡介
7-2. 後台相關元件分工說明
7-3. 前台相關元件分工說明
8. 前台網頁預覽功能驗證方式說明
9. 附件管理共用元件說明
9-1. 附件管理功能概述
9-2. 附件管理共用元件 AttachFileManagerLogic 使用方式
9-3. 附件下載共用元件 AttDownloadCommon 使用方式
10. 參數過濾元件說明