.NET Core實戰專案之CMS 第十章 設計篇-系統開發框架設計
這兩天比較忙,週末也在加班,所以更新的就慢了一點,不過沒關係,今天我們就進行千呼萬喚的系統開發框架的設計。不知道上篇關於架構設計的文章大家有沒有閱讀,如果閱讀後相信一定對架構設計有了更近一部的理解,如果你沒有閱讀也希望大家能好好閱讀一下!其實說白了,架構是為了應對軟體系統複雜度而提出的一個解決方案,架構設計的最終目的也就是為了讓複雜的問題簡單化!今天我們就結合架構設計的思想來進行我們的CMS實戰專案的架構設計,接著再設計下開發框架吧。如果你有其他看法或者見解歡迎加入我們的實戰專案交流群637326624 跟大夥共同交流!
本文已收錄至《 ofollow,noindex" target="_blank">.NET Core實戰專案之CMS 第一章 入門篇-開篇及總體規劃 》
作者:依樂祝
原文地址:
寫在前面
仔細想想我們的這個極簡CMS系統,可以說很簡單,簡單到都無須進行特殊的架構設計,只需按照你所熟悉的編碼方式直接進行快速的編碼實現即可,如果做得好的話,訪問量上來了你再加一個快取處理完全能夠支撐一定的併發!如下圖所示:我們前期先進行單體架構的實現,等後期分散式系列實戰課程的時候再講解如何進行分散式微服務架構的實現。
看到沒有,標準的單體架構,只是在資料庫層之前加了一個快取的設計來應對一些併發的情況!既然架構設計確定了,那麼我們就進行開發框架的搭建吧!如果架構的複雜點的話,可能涉及到資料庫叢集,站點叢集及負載均衡,可是我們完全沒必要那樣玩!一個階段設計一個階段的架構,要知道天貓也不是剛開始就架構的這麼完善支援這麼高的併發的!而是經過這麼多次雙十一的考驗之後慢慢完成到今天這個能夠支援每秒這麼次併發的!說白了,架構是一個演變的過程,而並非設計的越複雜,越完善就表示架構設計的就越好的(有點拗口,自己理解下),而要結合實際,讓需求來驅動架構。在分析設計階段,需要考慮一定的人力與時間去"跳出程式碼,總攬全域性",為業務和IT技術之間搭建一座"橋樑"。
CMS系統開發框架
話不多數,先看下我的專案結構截圖吧!
本來想進行很複雜的框架的實現的,仿照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/">GitHub與碼雲上的專案開源地址
今天我們搭建的這個專案的結構我已經同步更新到Github以及碼雲上了,有興趣的朋友可以下載檢視!覺得不錯的歡迎Star
GitHub: https://github.com/yilezhu/Czar.Cms
碼雲: https://gitee.com/yilezhu/Czar.Cms
如果你覺得這個系列對您有所幫助的話,歡迎以各種方式進行支援,最簡單有效的就是部落格園給個推薦,GitHub給個Star。同時今天我申請了一個DotNetCore實戰的訂閱號,有興趣的朋友可以微信關注下:

總結
本文我首先帶著大家理解了一下架構設計的目的,以及架構設計的演變性。接著對我們這個ASP.NET Core的CMS實戰專案進行了開發框架的設計。並對每個專案的所要實現的功能以及各自的職責進行了相關的介紹!相信你已經能夠清楚的明白了這個架構的思想!到此,設計篇已經結束,接下來就讓我們進行真正的專案開發吧即開發篇的開始!