.NET Core實戰項目之CMS 第十章 設計篇-系統開發框架設計

来源:https://www.cnblogs.com/yilezhu/archive/2018/12/10/10094357.html
-Advertisement-
Play Games

這兩天比較忙,周末也在加班,所以更新的就慢了一點,不過沒關係,今天我們就進行千呼萬喚的系統開發框架的設計。不知道上篇關於架構設計的文章大家有沒有閱讀,如果閱讀後相信一定對架構設計有了更近一部的理解,如果你沒有閱讀也希望大家能好好閱讀一下!其實說白了,架構是為了應對軟體系統複雜度而提出的一個解決方案, ...


這兩天比較忙,周末也在加班,所以更新的就慢了一點,不過沒關係,今天我們就進行千呼萬喚的系統開發框架的設計。不知道上篇關於架構設計的文章大家有沒有閱讀,如果閱讀後相信一定對架構設計有了更近一部的理解,如果你沒有閱讀也希望大家能好好閱讀一下!其實說白了,架構是為了應對軟體系統複雜度而提出的一個解決方案,架構設計的最終目的也就是為了讓複雜的問題簡單化!今天我們就結合架構設計的思想來進行我們的CMS實戰項目的架構設計,接著再設計下開發框架吧。如果你有其他看法或者見解歡迎加入我們的實戰項目交流群637326624 跟大伙共同交流!

本文已收錄至《.NET Core實戰項目之CMS 第一章 入門篇-開篇及總體規劃

作者:依樂祝

原文地址:https://www.cnblogs.com/yilezhu/p/10094357.html

寫在前面

仔細想想我們的這個極簡CMS系統,可以說很簡單,簡單到都無須進行特殊的架構設計,只需按照你所熟悉的編碼方式直接進行快速的編碼實現即可,如果做得好的話,訪問量上來了你再加一個緩存處理完全能夠支撐一定的併發!如下圖所示:我們前期先進行單體架構的實現,等後期分散式系列實戰課程的時候再講解如何進行分散式微服務架構的實現。

1544359198075

看到沒有,標準的單體架構,只是在資料庫層之前加了一個緩存的設計來應對一些併發的情況!既然架構設計確定了,那麼我們就進行開發框架的搭建吧!如果架構的複雜點的話,可能涉及到資料庫集群,站點集群及負載均衡,可是我們完全沒必要那樣玩!一個階段設計一個階段的架構,要知道天貓也不是剛開始就架構的這麼完善支持這麼高的併發的!而是經過這麼多次雙十一的考驗之後慢慢完成到今天這個能夠支持每秒這麼次併發的!說白了,架構是一個演變的過程,而並非設計的越複雜,越完善就表示架構設計的就越好的(有點拗口,自己理解下),而要結合實際,讓需求來驅動架構。在分析設計階段,需要考慮一定的人力與時間去"跳出代碼,總攬全局",為業務和IT技術之間搭建一座"橋梁"。

CMS系統開發框架

話不多數,先看下我的項目結構截圖吧!

1544368326507

本來想進行很複雜的框架的實現的,仿照DDD的思想進行開發框架的搭建,後來想想何必呢,這麼簡單的系統搞得那麼複雜,嚴重影響開發效率,反而得不嘗試。後來經過深思熟慮後精簡精簡再精簡,斟酌斟酌再斟酌後就有了上面這樣的項目結構。乍一看10個項目,是不是嚇得馬上就要關閉網頁了呢?下麵我會給你詳細講解每一個項目的作用以及所要實現的功能。

其實明眼人一看這個結構就已經知道了每個模塊所要實現的功能了,這樣的分層設計可謂簡單的都不需要我過多介紹,你都能明白每一個項目是用來乾什麼的(明白人也可以進行項目的再度融合,甚至簡單粗暴的合併到一個項目裡面,不過本人更喜歡這種分層的設計感覺結構更清晰)。可是我這裡還是要啰嗦兩句給你介紹下:

既然微軟已經在前兩天將正式版的.NET Core SDK升級到了2.2的版本,那麼我們的CMS系統就用.NET Core2.2進行搭建吧!當然,你在練習的時候也可以使用2.1進行,沒有強制要求。

註意:ASP.NET Core2.2對VisualStudio有一定的要求必須是2017的高版本才能用。其目前的版本是15.8.4 總之儘量不要低於我這個版本,我正準備升級呢!

  1. UI

    用戶UI層:這個就是我們CMS系統所要呈現的用戶界面,而我們得CMS系統又包含後臺管理模塊以及前臺網站模塊,因此這個解決方案文件夾下麵有兩個ASP.NET Core網站項目,留個思考題給你吧,猜猜看哪個項目是後臺管理模塊,哪個項目是前臺網站模塊呢?把你的答案寫在留言區或者加群跟大伙討論下吧!

  2. Application

    應用層:這個層提供對用戶界面的介面訪問,用戶界面層的兩個模塊如果想跟資料庫交互都需要通過這個層來進行。這個應用層起到用戶界面跟資料庫操作進行解耦的作用。

  3. Repositonry

    倉儲層:這個層主要就是跟資料庫的交互了,任何跟資料庫有關的操作都在這層來進行實現,看了上面的圖相信你已經猜到了,前期我只是實現SqlServer的倉儲實現,至於其他資料庫的實現你只需要再建一個Czar.Cms.Repository.資料庫名 的倉儲實現就可以了!這裡我們也是採用依賴抽象而不依賴具體實現所以方便後期的擴展。

  4. Entity

    實體對象層:這個層感覺有點多餘,完全可以把這個界面融合到其他層,但是我並沒有這樣做,目的也是讓結構更清晰,更容易理解。這裡有兩個項目,相信一路看教程過來的朋友一定還記得我的第二篇文章《.NET Core實戰項目之CMS 第二章 入門篇-快速入門ASP.NET Core看這篇就夠了 》中用的是ViewModel而不是直接用實體對象了!因為實際引用中可能我們頁面中需要的數據跟我們資料庫中的數據並不完全一樣的,而且,有時候我們頁面中可能包含了更多地信息,這時候我們怎麼往視圖中傳遞數據呢?這時候我們就有了ViewModel的概念。比方說:我們的有一個訂單詳細頁要同時顯示訂單的信息,以及訂單對應的商品列表,這時候怎麼辦呢?我們用一個ViewModel包含了訂單實體,並且包含了商品的列表就可以更方便的把數據傳遞到視圖裡面了!

  5. Infrastructure

    基礎設施層:這個層也是我們代碼的核心層了,我們會在這裡實現很多我們通用的方法,比方說幫助類,對字元串String進行一些擴展,序列化與反序列化,HTTP請求,過濾器,日誌功能,中間件的擴展等等。總之這個裡麵包含了Czar.Cms的所有核心。

  6. Test

    測試層:這個層不用多說了吧,就是對系統進行測試的!裡面包含單元測試以及集成測試!

相信通過我上面的介紹你一定會感覺到這個CMS系統的開發框架的層次非常清晰了吧!其實作為新手時期的我也是,看到項目太多的話就從心裡面害怕,其實大伙大可不必,看到讓你害怕的事情就要勇敢的面對它,戰勝它,一定要跳出自己的舒適區。

GitHub與碼雲上的項目開源地址

今天我們搭建的這個項目的結構我已經同步更新到Github以及碼雲上了,有興趣的朋友可以下載查看!覺得不錯的歡迎Star
GitHub:https://github.com/yilezhu/Czar.Cms
碼雲:https://gitee.com/yilezhu/Czar.Cms
如果你覺得這個系列對您有所幫助的話,歡迎以各種方式進行支持,最簡單有效的就是博客園給個推薦,GitHub給個Star。同時今天我申請了一個DotNetCore實戰的訂閱號,有興趣的朋友可以微信關註下:
DotNetCore實戰公眾號

總結

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 集成Spring Boot 2.1,Mybatis,Mybatis Plus,Druid,FastJson,Redis,Rabbit MQ,Kafka等,可使用代碼生成器快速開發項目,使用maven assembly打包發佈 https://geekidea.github.io/fast-sprin... ...
  • python的內建模塊collections有幾個關鍵的數據結構,平常在使用的時候,開發者可以直接調用,不需要自己重覆製造輪子,這樣可以提高開發效率。 1. deque雙端隊列 平常我們使用的python內置list類的append,extend,pop方法都是從list的尾部執行的(pop()預設 ...
  • import os import time # 添加員工信息 def zengjia(): print('請輸入員工的基本信息:') while 1: while 1: id = input("請輸入編號").strip() if not id.isdigit(): print("... ...
  • 轉自:https://blog.csdn.net/apache0554/article/details/53889253 前言:中文編碼問題一直是程式員頭疼的問題,而Python2中的字元編碼足矣令新手抓狂。本文將儘量用通俗的語言帶大家徹底的瞭解字元編碼以及Python2和3中的各種編碼問題。 一、 ...
  • 今天晚上學習《零基礎學Java》,看到第50頁時,發現書上一行代碼自己想不通,這行代碼意思是將123按位取反,程式運行後輸出結果是-124,即~123=-124. 開始我個人理解是123轉換成二進位為:01111011,按位取反後為10000100,即132,與真實輸出結果-124不一致。後來我查閱 ...
  • python學習之數字 1.python數值類型 2. 數字類型轉換 3. 常用函數 3.1 數學函數 3.2 隨機函數 ...
  • 列表(list) 基本操作 比如說我要整理一個近期熱映的電影列表: 列表很像數組,但功能超越數組。列表都是從0開始的,python中列表無需事先聲明類型。 從列表後面加上一個新的元素,比如說加個“無名之輩”,是 方法。 刪除列表最後一個元素: 方法。 兩個列表相銜接,用的是 方法。 我想在某個條件下 ...
  • python學習之運算符; 算術運算符; 比較運算符;位運算符; 邏輯運算符; 成員運算符; 身份運算符; ++ 或 -- 自運算符; is 和 ==; 數組的兩種賦值方式區別 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...