這兩天比較忙,週末也在加班,因此更新的就慢了一點,不過不要緊,今天咱們就進行千呼萬喚的系統開發框架的設計。不知道上篇關於架構設計的文章你們有沒有閱讀,若是閱讀後相信必定對架構設計有了更近一部的理解,若是你沒有閱讀也但願你們能好好閱讀一下!其實說白了,架構是爲了應對軟件系統複雜度而提出的一個解決方案,架構設計的最終目的也就是爲了讓複雜的問題簡單化!今天咱們就結合架構設計的思想來進行咱們的CMS實戰項目的架構設計,接着再設計下開發框架吧。若是你有其餘見解或者看法歡迎加入咱們的實戰項目交流羣637326624 跟大夥共同交流!html
本文已收錄至《.NET Core實戰項目之CMS 第一章 入門篇-開篇及整體規劃》git
做者:依樂祝github
仔細想一想咱們的這個極簡CMS系統,能夠說很簡單,簡單到都無須進行特殊的架構設計,只需按照你所熟悉的編碼方式直接進行快速的編碼實現便可,若是作得好的話,訪問量上來了你再加一個緩存處理徹底可以支撐必定的併發!以下圖所示:咱們前期先進行單體架構的實現,等後期分佈式系列實戰課程的時候再講解如何進行分佈式微服務架構的實現。緩存
看到沒有,標準的單體架構,只是在數據庫層以前加了一個緩存的設計來應對一些併發的狀況!既然架構設計肯定了,那麼咱們就進行開發框架的搭建吧!若是架構的複雜點的話,可能涉及到數據庫集羣,站點集羣及負載均衡,但是咱們徹底不必那樣玩!一個階段設計一個階段的架構,要知道天貓也不是剛開始就架構的這麼完善支持這麼高的併發的!而是通過這麼屢次雙十一的考驗以後慢慢完成到今天這個可以支持每秒這麼次併發的!說白了,架構是一個演變的過程,而並不是設計的越複雜,越完善就表示架構設計的就越好的(有點拗口,本身理解下),而要結合實際,讓需求來驅動架構。在分析設計階段,須要考慮必定的人力與時間去"跳出代碼,總攬全局",爲業務和IT技術之間搭建一座"橋樑"。微信
話很少數,先看下個人項目結構截圖吧!架構
原本想進行很複雜的框架的實現的,仿照DDD的思想進行開發框架的搭建,後來想一想何須呢,這麼簡單的系統搞得那麼複雜,嚴重影響開發效率,反而得不償失。後來通過深思熟慮後精簡精簡再精簡,斟酌斟酌再斟酌後就有了上面這樣的項目結構。乍一看10個項目,是否是嚇得立刻就要關閉網頁了呢?下面我會給你詳細講解每個項目的做用以及所要實現的功能。併發
其實明眼人一看這個結構就已經知道了每一個模塊所要實現的功能了,這樣的分層設計可謂簡單的都不須要我過多介紹,你都能明白每個項目是用來幹什麼的(明白人也能夠進行項目的再度融合,甚至簡單粗暴的合併到一個項目裏面,不過本人更喜歡這種分層的設計感受結構更清晰)。但是我這裏仍是要囉嗦兩句給你介紹下:負載均衡
既然微軟已經在前兩天將正式版的.NET Core SDK升級到了2.2的版本,那麼咱們的CMS系統就用.NET Core2.2進行搭建吧!固然,你在練習的時候也可使用2.1進行,沒有強制要求。框架
注意:ASP.NET Core2.2對VisualStudio有必定的要求必須是2017的高版本才能用。其目前的版本是15.8.4 總之儘可能不要低於我這個版本,我正準備升級呢!
UI
用戶UI層:這個就是咱們CMS系統所要呈現的用戶界面,而咱們得CMS系統又包含後臺管理模塊以及前臺網站模塊,所以這個解決方案文件夾下面有兩個ASP.NET Core網站項目,留個思考題給你吧,猜猜看哪一個項目是後臺管理模塊,哪一個項目是前臺網站模塊呢?把你的答案寫在留言區或者加羣跟大夥討論下吧!
Application
應用層:這個層提供對用戶界面的接口訪問,用戶界面層的兩個模塊若是想跟數據庫交互都須要經過這個層來進行。這個應用層起到用戶界面跟數據庫操做進行解耦的做用。
Repositonry
倉儲層:這個層主要就是跟數據庫的交互了,任何跟數據庫有關的操做都在這層來進行實現,看了上面的圖相信你已經猜到了,前期我只是實現SqlServer的倉儲實現,至於其餘數據庫的實現你只須要再建一個Czar.Cms.Repository.數據庫名 的倉儲實現就能夠了!這裏咱們也是採用依賴抽象而不依賴具體實現因此方便後期的擴展。
Entity
實體對象層:這個層感受有點多餘,徹底能夠把這個界面融合到其餘層,可是我並無這樣作,目的也是讓結構更清晰,更容易理解。這裏有兩個項目,相信一路看教程過來的朋友必定還記得個人第二篇文章《.NET Core實戰項目之CMS 第二章 入門篇-快速入門ASP.NET Core看這篇就夠了 》中用的是ViewModel而不是直接用實體對象了!由於實際引用中可能咱們頁面中須要的數據跟咱們數據庫中的數據並不徹底同樣的,並且,有時候咱們頁面中可能包含了更多地信息,這時候咱們怎麼往視圖中傳遞數據呢?這時候咱們就有了ViewModel的概念。比方說:咱們的有一個訂單詳細頁要同時顯示訂單的信息,以及訂單對應的商品列表,這時候怎麼辦呢?咱們用一個ViewModel包含了訂單實體,而且包含了商品的列表就能夠更方便的把數據傳遞到視圖裏面了!
Infrastructure
基礎設施層:這個層也是咱們代碼的核心層了,咱們會在這裏實現不少咱們通用的方法,比方說幫助類,對字符串String進行一些擴展,序列化與反序列化,HTTP請求,過濾器,日誌功能,中間件的擴展等等。總之這個裏面包含了Czar.Cms的全部核心。
Test
測試層:這個層不用多說了吧,就是對系統進行測試的!裏面包含單元測試以及集成測試!
相信經過我上面的介紹你必定會感受到這個CMS系統的開發框架的層次很是清晰了吧!其實做爲新手時期的我也是,看到項目太多的話就從內心面懼怕,其實大夥大可沒必要,看到讓你懼怕的事情就要勇敢的面對它,打敗它,必定要跳出本身的溫馨區。
今天咱們搭建的這個項目的結構我已經同步更新到Github以及碼雲上了,有興趣的朋友能夠下載查看!以爲不錯的歡迎Star
GitHub:https://github.com/yilezhu/Czar.Cms
碼雲:https://gitee.com/yilezhu/Czar.Cms
若是你以爲這個系列對您有所幫助的話,歡迎以各類方式進行支持,最簡單有效的就是博客園給個推薦,GitHub給個Star。同時今天我申請了一個DotNetCore實戰的訂閱號,有興趣的朋友能夠微信關注下:
本文我首先帶着你們理解了一下架構設計的目的,以及架構設計的演變性。接着對咱們這個ASP.NET Core的CMS實戰項目進行了開發框架的設計。並對每一個項目的所要實現的功能以及各自的職責進行了相關的介紹!相信你已經可以清楚的明白了這個架構的思想!到此,設計篇已經結束,接下來就讓咱們進行真正的項目開發吧即開發篇的開始!