.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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...