BrnShop開源網上商城第一講:架構設計

首先在此感謝你們對BrnShop項目的支持和鼓勵!咱們在發佈BrnShop之前曾推測項目會受到很多園友的支持,但沒想到園友們的支持大大超過咱們的預測。4天6000次瀏覽,140個推薦,170個評論,8000次下載。看到這些數據後咱們心裏除了激動外,更多了一份責任。不管未來遇到多大的困難,咱們必定要堅持把BrnShop堅持到底!!html

  若是你還不知道BrnShop是什麼或尚未下載源碼的能夠點此下載,若是下載源碼後發現商城有bug,也能夠點此下載(什麼?你仍是1.0.**版本?咱們如今都已經更新到1.0.141版本了!)。web

  在開始今天的主題前,有個問題先向你們解釋下:很多園友運行咱們的程序後,覺得前臺頁面功能不完整,因而認爲咱們的商城是個殘缺品,功能不全。在此我針對這個問題向你們鄭重說明下:不是咱們的功能不全,對於一個商城來講該有的功能咱們程序都提供了,不信你能夠查看下每一個控制器及它的動做方法,就會發現你想要的各個功能。只是這些功能默認主題並無相應的頁面或糅合進別的頁面去了。咱們的默認主題只提供一個演示功能(君沒見Php的ecshop的默認主題更粗糙嗎?)。sql

  好了,下面進入今天的主題:BrnShop開源網上商城架構設計緩存

  拿到源碼的朋友知道BrnShop解決方案是由4個解決方案文件夾構成的。它們分別是Libraries,Presentation,Strategies和Plugins,下面是這四個解決方案文件夾的截圖和介紹:架構

  

  • Libraries:商城基礎類庫,主要提供系統核心,數據訪問,業務邏輯等功能。
  • Presentation:商城web展現,提供網站前臺和後臺實現。
  • Strategies:包含各類策略程序集
  • Plugins:包含開發受權,支付等插件。

  經過上面的介紹你們能夠看出其實BrnShop的主要功能都在Libraries和Presentation中,而Strategies和Plugins只是提供程序外圍的一些服務。到這相信你們的思路就清晰多了,下面依次介紹各個項目:mvc

  BrnShop.Core項目:這個項目是BrnShop最核心的項目,它提供商城最底層,最基礎的服務。首先經過圖片給出各個模塊的基本介紹:異步

  

  • 對於異步模塊,緩存模塊,配置模塊,數據模塊,郵箱模塊,隨機值模塊,Session模塊,短信模塊這8個模塊來講,BrnShop.Core項目只提供加載和接口,並不包含具體實現。你們請看郵箱模塊代碼(其它7個模塊的實現原理同樣):
複製代碼
 1     /// <summary>
 2     /// BrnShop郵件管理類
 3     /// </summary>
 4     public class BSPEmail
 5     {
 6         private static IEmailStrategy _emailstrategy = null;//郵件策略
 7 
 8         static BSPEmail()
 9         {
10             Load();
11         }
12 
13         /// <summary>
14         /// 郵件策略實例
15         /// </summary>
16         public static IEmailStrategy Instance
17         {
18             get { return _emailstrategy; }
19         }
20 
21         /// <summary>
22         /// 加載郵件策略
23         /// </summary>
24         private static void Load()
25         {
26             try
27             {
28                 string[] fileNameList = Directory.GetFiles(System.Web.HttpRuntime.BinDirectory, "BrnShop.EmailStrategy.*.dll", SearchOption.TopDirectoryOnly);
29                 _emailstrategy = (IEmailStrategy)Activator.CreateInstance(Type.GetType(string.Format("BrnShop.EmailStrategy.{0}.EmailStrategy, BrnShop.EmailStrategy.{0}", fileNameList[0].Substring(fileNameList[0].IndexOf("EmailStrategy.") + 14).Replace(".dll", "")),
30                                                                                        false,
31                                                                                        true));
32             }
33             catch
34             {
35                 throw new BSPException("建立\"郵件策略對象\"失敗,可能存在的緣由:未將\"郵件策略程序集\"添加到bin目錄中;將多個\"郵件策略程序集\"添加到bin目錄中;\"郵件策略程序集\"文件名不符合\"BrnShop.EmailStrategy.{策略名稱}.dll\"格式");
36             }
37         }
38 
39     }
複製代碼

  經過以上代碼你們不難看出實現的核心思想就是「約定大於配置」和「策略模式」。這裏的「約定大於配置」你們須要注意下,若是你們想本身實現一個策略,例如郵箱策略(其它策略同樣),請必定要保證符合約定限制,具體就是程序集名必定要知足「BrnShop.EmailStrategy.{自定義名稱}.dll」格式,命名空間知足"BrnShop.EmailStrategy.{自定義名稱}"格式,主類名必須是「EmailStrategy」。還有一點就是爲了保證策略程序集能正確的編譯到BilShop.Web項目的bin文件夾中,必定要配置項目生成的輸出路徑爲「..\..\Presentation\BrnShop.Web\bin\」post

  目前商城默認實現了每一個策略,他們的對應關係及介紹以下:網站

  

  • 當前只有企業版提供NOSQL實現,因此目前Data文件夾中的NOSQL爲空,後期隨着企業版的開源也會補上NOSQL代碼實現。
  • 插件部份內容比較多,我後面會專門寫一遍博客介紹。不過你們能夠先看看這篇文章http://shazwazza.com/post/Developing-a-plugin-framework-in-ASPNET-with-medium-trust

  BrnShop.Data項目:這個項目主要是經過調用BrnShop.Core項目中的BSPData類來和各類數據存儲作交互,你們能夠本身看下代碼,都有註釋,沒什麼難度。PS:前幾天園子裏有個朋友說想用EF替換掉sql語句和存儲過程,他當時的替換點是重寫BrnShop.Data項目,在此我不反對他使用EF,只是替換點不該該是BrnShop.Data項目,而是BrnShop.RDBSStrategy.SqlServer策略程序集。spa

  BrnShop.Services項目:商城的業務功能實現,若是你想找商城某個功能的實現能夠來這個項目中找,例如購物車的實現。PS:在BrnShop.Service項目中有個Admin文件夾,這個文件夾是商城後臺操做要用到的類。

  BrnShop.Web.Framework項目:這個項目主要提供商城web層面的設計。你們能夠打開看一看裏面都是自定義控制器類,分頁,動做篩選器等MVC方面的東西。

  BrnShop.Web.Admin項目:商城網站後臺,這個項目的類型是類庫,不是web項目(但mvc的各部分俱全),因此不能直接啓動。PS:關於網站發佈問題,這裏提供一個簡單的方法,首先將vs的生成配置改爲"release",而後將BrnShop.Web項目中的web.config文件中的compilation節點的debug屬性設置成「false」,而後從新生成BrnShop.Web項目,最後把BrnShop.Web項目的文件夾複製並刪除無用的文件(例如obj文件夾下的文件)到iis中就能夠了。

  BrnShop.Web項目:商城網站前臺:使用ASP.NET MVC3實現。各個文件夾或文件解釋以下:

  

  今天這一篇博文主要是幫助你們對BrnShop項目有個總體的認識,下一篇我會介紹下BrnShop的ASP.NET MVC實現。敬請期待!

相關文章
相關標籤/搜索