商城上線快2、3個月了,一直都懶得寫點東西,在加上雜七雜八的事情也比較忙,所以都沒有把這個系統當時做的整個架構思緒整理清,昨天才從深圳完了兩天回來,怎感覺是要做的事來著.剛開始接觸CMP模式的時候也是看了它幾天,到谷歌百度裡面一搜,我們博客園裡面就有蛙蛙池塘的提高軟件開發效率三板斧之二利用CMP模式一文裡有它的詳細介紹,在這裡我自己也對這個用CMP模式拿來真正上項目時候的問題來做個總結.
項目名稱:惠海IT商城
網址:http://http://www.huihaimall.com/
開發環境:WinXP SP3、IIS5.0、Dreamweaver、VS 2005、SQL-Server 2000
項目描述:項目實現了商品的浏覽篩選(主要是公司做的IT產品)、會員商品收藏、訂購(訂單)、發郵件推薦給朋友、會員積分、收貨地址薄、DIY自主裝機等,業務邏輯全部在本項目中用.NET(CMP)實現,而展示就不一定都是用.net的aspx頁面來做,如DIY裝機就是用Flex生成flash來實現的,但是它們都是同步的(同登陸同注銷,包括會員產品收藏等).還有一個最重要的就是後台管理也是用Flex調用.net來實現的,由於要提供Flex調用的接口,所有還提供了幾個WebService的頁面(關與身份驗證請見:在WebService中使用Session或Cookie---實現WebService身份驗證(客戶端是Flex) ),另外在用JQuery發送Ajax請求的時候頁面傳輸數據時候還有用到Json數據(Flex好象有幾個地方也用到了).
項目解決方案截圖如下:
下面,我對上圖所示以我的了解進行簡要的介紹:
CMPServices 它裡面主要是一些CMP配置和服務的基類,他們對應的名稱和功能內如下所:
名稱 功能描述 CMPConfigurationHandler 繼承自IConfigurationSectionHandler,用來讀取在Web.Config文件內的自定義CMP配置. CommandMapping 命令映射類,用於某一個業務的容器,一般為對應Insert、Delete、Update、Select裡某一個存儲過程名為CommandName,裡面可能包含多個CommandParameter. CommandParameter 存儲過程參數類,裡面有ParameterName、Size、DbTypeHint等屬性,還有一個ClassMember的屬性,表示對應實體模型的屬性,一般ParameterName為@Name而ClassMember值就為Name(預先配置好的),因為一般存儲過程的參數名就對應數據庫實體模型的列字段. ContainerMapping 容器映射類,一般為一個業務實體,比如用戶,它裡面就有Insert、Delete、Update、Select這4個CommandMapping,而且它有個key在CMP裡面的映射ID叫ContainerMappingId和ContainedClass對應為實體對象模型名. ContainerMappingSet 多個ContainerMapping容器映射集合類,裡面的Hashtable可根據ContainerMappingId映射ID的key來匹配ContainerMapping. PersistableObject 持久對象基類,實體類繼承它能實現對數據的保存(一般為Insert、Delete、Update命令操作). PersistableObjectSet 繼承自PersistableObject,實現數據持久化保存結果(一般為Select命令操作). SqlPersistenceContainer 業務的容器基類,構造函數需ContainerMapping,包含Insert、Delete、Update、Select四個虛方法. StdPersistenceContainer 業務的容器,構造函數ContainerMapping調用父類構造函數,根據ContainerMapping對Insert、Delete、Update、Select四個方法進行具體的實現.