開發思想

来源:https://www.cnblogs.com/lcjtt/archive/2022/08/21/16610462.html
-Advertisement-
Play Games

在『伺服器部署 Vue 和 Django 項目的全記錄』一文中,介紹了在伺服器中使用 Nginx 部署前後端項目的過程。然而,當 Web 應用流量增多時,需要考慮負載均衡、流量分發、容災等情況,原生的部署方式通常難以滿足需求。此時,引入 Docker 部署多節點,能夠在單台高性能伺服器或伺服器集群中... ...


思想

策略思想

解決的問題:一類對象,不同對象有不同的處理

實現

頂級介面

  • 定義規範,面向介面編程

抽象策略

  • 定義一套模板,不同的交給不同的策略實現

具體策略

  • 枚舉 對象標識 --具體策略

  • 策略集合-對象標識

 

觀察者思想

解決的問題:當一個對象狀態發生改變時,所有依賴他的對象將得到通知並自動更新

常見場景:

  • spring事件

  • 消息隊列

  • 我們不用去關心依賴的對象,只用把自己的事情做好

實現:

  • 充分解耦

  • 可實現一對一和廣播

頂級事件介面

具體事件

頂級訂閱者介面

具體訂閱者

事件發佈中心

 

上下文思想

解決的問題:當一個參數在需要四處傳遞,可設置上下文,從上下文中取

實現:

  • spring提供了一系列獲取容器對象的介面ApplicationContextAware....

上下文頂級介面,定義規範

具體上下文

  • 保證全局唯一

  • 並非容器

池化思想

線程池

  • 復用線程,減少系統資源的消耗

  • 便於管理線程

  • 快速的響應

合理的線程池:根據不同場景,情況去構建合適的線程池,保證效率和資源消耗

場景:流程發佈,構建流程軌跡

實現

CAS鎖控制控制線程池唯一,只有一個線程能夠進行調度(提交任務)

private AtomicBoolean started = new AtomicBoolean(false);

private AtomicBoolean scheduler = new AtomicBoolean(false);

自定義阻塞隊列,存放任務

private BlockingQueue<ProcessDefinition> queue = new LinkedBlockingQueue<>(512);

單個線程迴圈處理,allowCoreThreadTimeOut回收線程節約資源

this.executor.allowCoreThreadTimeOut(true);


try {
           ProcessDefinition definition;
           while ((definition = queue.poll()) != null) {
               handler(definition);
          }
      } catch (Exception e) {
           e.printStackTrace();
      } finally {
           scheduler.compareAndSet(true, false);
           if (!queue.isEmpty()) {
               scheduler();
          }
      }

設計思想

並不是絕對的,靈活變通

  • 構建合理的類結構,便於擴展,理解

  • 提取公共方法實現復用

單一職責模式

一個類只做一個事情,可通過依賴建立聯繫

優點:職責分明,結構清晰,便於修改

前:

img

後:

img

開閉原則

實現不改變這個類的情況下進行擴展

實現:策略模式

前:

img

 

後:

img

里氏替換原則

通過繼承來進行擴展

依賴倒置原則

面向介面編程

 

合成復用原則

多用組合代替繼承

  • 一般來說,如果兩個類之間是"Has-A"關係,則使用組合/聚合;如果是"Is-A"關係,則使用繼承。

迪米特法則

中間類

介面隔離原則

介面隔離原則和單一職責都是為了提高類的內聚性、降低它們之間的耦合性,體現了封裝的思想,但兩者是不同的:

  • 單一職責原則註重的是職責,而介面隔離原則註重的是對介面依賴的隔離。

  • 單一職責原則主要是約束類,它針對的是程式中的實現和細節;介面隔離原則主要約束介面,主要針對抽象和程式整體框架的構建。

介面拆分


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

-Advertisement-
Play Games
更多相關文章
  • 小眾的2.4G射頻收發晶元, 和 Ci24R1, XN297L 一樣, 都屬於 nRF24L01 派生的 SOP8 版本. 在寄存器和操作上類似於nRF24L01, 但是寄存器中存在大量多位元組的設置, 沒有中斷, 完全靠輪詢工作, 這是這個型號的特點. 在相容性上, 和XN297L管腳佈局一致但是寄... ...
  • Oracle序列學習與使用總結 by:授客 QQ:1033553122 簡述 序列是oracle提供的用於生成一系列數字的資料庫對象,序列會自動生成順序遞增的序列號,可用於提供唯一的自動遞增主鍵。序列和視圖一樣,並不占用實際的存儲空間,只是在數據字典中保存他的定義信息。 創建序列 當創建序列時必須擁 ...
  • 概述 由一個或多個 Sentinel(哨兵)實例組成的 Sentinel 系統可以監視任意多個主伺服器,以及這些主伺服器屬下的所有從伺服器,併在被監視的主伺服器進入下線狀態時,自動將下線主伺服器屬下的某個從伺服器升級為新的主伺服器 簡單來說,哨兵就是帶有自動故障轉移功能的主從架構 搭建哨兵架構 以 ...
  • 4 運算符 4.1 算術運算符 4.1.1 概述 JavaScript 提供的算術運算符如下所示: | 類型 | 符號 | 示例| | | | | |加法運算符| + | a+b | |減法運算符| - | a-b | |乘法運算符| * | a*b | |除法運算符| / | a/b | |餘數運 ...
  • CSS transition 屬性詳解 點擊打開視頻講解更詳細 定義和用法 transition 屬性是一個簡寫屬性,用於設置四個過渡屬性: transition-property 規定設置過渡效果的 CSS 屬性的名稱。 transition-duration 規定完成過渡效果需要多少秒或毫秒。 ...
  • 6. layui大事件項目 文件位置:1.Node.js零基礎入門教程\node.js—資料\day8\素材\大事件項目 在assets/js/baseAPI.js中修改統一請求根路徑 6.1 調整介面名稱 純粹是因為之前本人手賤,故意修改名稱與埠所致的。 在assets/js/login.js中 ...
  • 什麼是HTML 點擊打開視頻講解更加詳細 Hyper Text Markup Language(超文本標記語言) 標簽控制排版 體積小,方便傳輸 編寫HTLML 推薦使用:VS Code <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
  • 迴圈列印紅綠燈 點擊打開視頻講解更加詳細 紅燈3秒後變成綠燈 綠燈5秒後變成黃燈 黃燈2秒後變成紅燈 案例: <template> <div id="app"> <div>迴圈列印紅綠燈</div> <div>紅燈3秒後變成綠燈</div> <div>綠燈5秒後變成黃燈</div> <div>黃燈2 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...