解鎖清晰代碼-每位開發者的20個架構技巧

来源:https://www.cnblogs.com/wintersun/archive/2023/11/12/17827171.html
-Advertisement-
Play Games

清晰架構原則對於任何希望創建健壯、可維護和可擴展軟體的軟體開發者來說都至關重要。理解並實施這些概念可以顯著提升你的編程技能。以下是對20個基本架構洞見的深入探討:依賴規則: 清晰架構的核心是依賴規則。它規定源代碼的依賴關係應始終指向內部。這種內向的方向確保了一個具有彈性的基礎,強調了關註點的分離,並 ...


    清晰架構原則對於任何希望創建健壯、可維護和可擴展軟體的軟體開發者來說都至關重要。理解並實施這些概念可以顯著提升你的編程技能。以下是對20個基本架構洞見的深入探討:

  1. 依賴規則: 清晰架構的核心是依賴規則。它規定源代碼的依賴關係應始終指向內部。這種內向的方向確保了一個具有彈性的基礎,強調了關註點的分離,並促進了更易維護的結構。像NDepend這樣的工具不僅僅是方便的工具,對於那些註重視覺檢查和平衡的開發者來說,它們是必不可少的。

  2. 實體優先: 在考慮資料庫或框架之前,專註於業務規則至關重要。通過最初專註於實體,您可以防範軟體受到緊密耦合困擾的風險。這種優先順序確保業務邏輯保持獨立、靈活且具有可擴展性。

  3. 解耦框架: 在編程的動態世界中,將業務邏輯與特定框架的代碼交織在一起是很誘人的。然而,真正的精妙之處在於保持二者的分離。例如,在使用ASP.NET Core Web API時,始終在核心代碼和Entity Framework之間保持一個保護層。

  4. 將資料庫視為外部細節: 一位經驗豐富的開發者的特征是他們能夠將資料庫、框架和第三方庫視為純粹的外部細節。這種視角確保核心業務邏輯保持一致且不受外部變化或升級的影響。

  5. 利用數據傳輸對象(DTOs): DTOs是軟體架構中的默默英雄。它們在確保數據在各層之間無縫傳輸的過程中發揮了至關重要的作用,而不會使業務邏輯不必要地糾纏在一起。

  6. 註意大類: 大類不僅僅是難以處理的,它們通常是底層設計缺陷的跡象。龐大的類就像是一顆定時炸彈,容易出現錯誤和複雜性。及時採取主動措施,拆分這樣的類,並確保每個部分的目的清晰明確是至關重要的。

  7. 避免全局狀態: 全局狀態的誘惑是無法抗拒的,但與之帶來的緊密耦合和不可預測性同樣不可忽視。與其屈從於它們的錶面便利性,不如選擇顯式依賴傳遞,確保更結構化和可靠的代碼。

  8. 優先考慮可配置性: 在不斷演變的技術環境中,適應性是關鍵。通過外部化配置詳細信息並利用.NET Core內置的配置系統等功能,您不僅增加了靈活性的層次,還使應用程式具有未來的可擴展性。

  9. 資料庫不可知性: 您的軟體應該是一個變色龍,能夠適應其所處的任何資料庫環境,無論是SQL、NoSQL還是平面文件。這種適應性確保了無與倫比的靈活性、易維護性和根據任何項目獨特需求進行定製的可擴展性。

  10. 單元測試: 超越僅僅的驗證,單元測試是每個應用程式層健康狀況的證明。它是每個開發者需要的安全網,確保核心組件之間的交互是和諧的,沒有意外的故障。

  11. 清晰勝於捷徑: 捷徑的誘惑可以令人難以抵擋。但清晰度和可讀性應該始終勝過簡潔性。這種關註確保無論是您重新訪問代碼還是新團隊成員深入其中,體驗都是流暢而直觀的。

  12. 命名一致性: 一致性命名規範的威力不可言喻。這種一致性充當了一張路線圖,引導開發者瀏覽代碼,使故障排除和增強變得輕而易舉。

  13. 保持清晰的邊界: 一個定義良好的邊界就像是一座堡壘,保護核心邏輯免受外部影響,無論是用戶界面、資料庫還是外部服務。這種清晰的界定促進了模塊化,是高效軟體架構的基石。

  14. 接受不可變數據結構: 不可變數據結構類似於可信賴的盾牌,保護免受無意的錯誤,確保可預測性。它們的採用可以顯著減少錯誤,並確保更穩定的代碼環境。

  15. 依賴註入:依賴註入(DI)不僅僅是一個時髦辭彙;它是一個改變游戲規則的元素。DI顛覆了依賴關係,引入了增強的模塊化和可測試性。通過解耦組件並使它們可互換,DI為開發者提供了無與倫比的靈活性。

  16. DRY原則:重覆是效率的對立面。通過遵循“不要重覆自己”的原則,開發者可以集中和重覆使用代碼,簡化流程,確保和諧的軟體生態系統。

  17. KISS:複雜性是效率的敵人。通過保持架構簡單而直接,開發者可以確保他們在堅實且易於理解的基礎上構建。

  18. YAGNI原則:預測未來的需求可能導致過度工程。 “你不會需要它”原則是一個提醒,要為當前構建,確保精簡、有目的的代碼。

  19. 記錄決策:良好記錄的架構決策對於當前團隊成員和未來的新成員都是救命稻草。通過保持全面的決策日誌,選擇背後的理念變得清晰,為未來的修改鋪平了道路。

  20. 限制函數參數:簡單性應該貫穿架構的每個方面,包括函數設計。將參數限制在三到四個以內確保了可讀性,並防止過於複雜。用無數參數重載函數不僅會迷惑開發者,還可能引入不必要的依賴,增加錯誤的潛在風險。


    Clean_Architecture2

結論

     清晰架構不僅僅是遵循一組規則或學習編程;它是一種心態的採納。它涉及到認識在軟體設計中清晰邊界、可維護性和可擴展性的重要性。在今天不斷演進的數字化領域,人工智慧驅動的解決方案和數據項目已經成為常態,擁有堅實的架構基礎比以往任何時候都更為重要。通過內化和實施這20個架構洞見,開發者可以在軟體開發這個動態世界中更加自信和精準地導航。請記住,在每個出色應用的核心,都有一個強大、適應性強、直觀的架構. 優先考慮這些原則,看著您的軟體在任何環境中茁壯成長。


今天先到這兒,希望對雲原生,技術領導力, 企業管理,系統架構設計與評估,團隊管理, 項目管理, 產品管管,團隊建設 有參考作用 , 您可能感興趣的文章:
領導人怎樣帶領好團隊
構建創業公司突擊小團隊
國際化環境下系統架構演化
微服務架構設計
視頻直播平臺的系統架構演化
微服務與Docker介紹
Docker與CI持續集成/CD
互聯網電商購物車架構演變案例
互聯網業務場景下消息隊列架構
互聯網高效研發團隊管理演進之一
消息系統架構設計演進
互聯網電商搜索架構演化之一
企業信息化與軟體工程的迷思
企業項目化管理介紹
軟體項目成功之要素
人際溝通風格介紹一
精益IT組織與分享式領導
學習型組織與企業
企業創新文化與等級觀念
組織目標與個人目標
初創公司人才招聘與管理
人才公司環境與企業文化
企業文化、團隊文化與知識共用
高效能的團隊建設
項目管理溝通計劃
構建高效的研發與自動化運維
某大型電商雲平臺實踐
互聯網資料庫架構設計思路
IT基礎架構規劃方案一(網路系統規劃)
餐飲行業解決方案之客戶分析流程
餐飲行業解決方案之採購戰略制定與實施流程
餐飲行業解決方案之業務設計流程
供應鏈需求調研CheckList
企業應用之性能實時度量系統演變

如有想瞭解更多軟體設計與架構, 系統IT,企業信息化, 團隊管理 資訊,請關註我的微信訂閱號:

MegadotnetMicroMsg_thumb1_thumb1_thu[2]

作者:Petter Liu
出處:http://www.cnblogs.com/wintersun/
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。 該文章也同時發佈在我的獨立博客中-Petter Liu Blog。


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

-Advertisement-
Play Games
更多相關文章
  • 在Go語言中,我們通常會遇到兩種主要的方式來處理和操作字元串:使用fmt.Sprintf函數和string.Builder類型。儘管兩者都可以實現字元串的格式化和連接,但它們在性能和用法上有一些關鍵區別。 1. fmt.Sprintf fmt.Sprintf是一個函數,它根據提供的格式化字元串和參數 ...
  • 在多線程編程中,如果每個線程的運行不是完全獨立的。那麼,一個線程執行到某個時刻需要知道其他線程發生了什麼。嗯,這就是所謂線程同步。同步事件對象(XXXEvent)有兩種行為: 1、等待。線程在此時會暫停運行,等待其他線程發出信號才繼續(等你約); 2、發出信號。當前線程發出信號,其他正在等待線程收到 ...
  • 思想 DAO(Data Access Object)數據訪問對象,是我們在做結構化資料庫訪問的時候傳輸的對象,通過這個對象我們可以與資料庫中的表建立映射關係 DTO(Data Transfer Object)是我們在與前端進行數據交換時傳遞的對象 為什麼需要設置這這兩種對象呢? 為了數據安全 如果我 ...
  • 1、Bring Up流程 SOC (System on a Chip) bring-up是一個複雜的過程,涉及到硬體、固件和軟體的集成和驗證,以下是一個基於BROM,SPL,UBOOT和Linux的啟動流程的概述: BROM (Boot Read-Only Memory)啟動:啟動的最初階段,在這個 ...
  • Android Studio簡單還原微信ui 上一期完成內容(前情提要) 上次我們簡單地實現了微信的幾個初始界面,並且在聯繫人頁面通過recycleview添加了許多的view 目標 建立在上次的基礎上,我們來擴展聯繫人界面的功能,給每一個view添加一個點擊功能,讓其可以跳轉到另一個activit ...
  • 本章將探討 HarmonyOS 的高級特性,包括分散式能力、安全機制和性能優化。這些特性可以幫助你構建更強大、更安全、更高效的應用。 ...
  • 事件對象 事件對象是由瀏覽器在外面觸發事件的時候創建的,這個對象封裝了各種事件相關的各種信息 例如: 滑鼠的位置 鍵盤的按鍵 瀏覽器創建事件對象後,會將事件對象作為響應參數傳遞 在DOM類型中有多種不同類型的事件對象,但是他們都一個祖先Event event.clientX:獲取滑鼠的X軸坐標 ev ...
  • 概念 日期類型使用自 UTC(Coordinated Universal Time,國際協調時間)1970 年 1 月 1 日午夜(零時)開始經過的毫秒數來保存日期。Date 類型保存的日期能夠精確到 1970 年 1 月 1 日之前或之後的 285616 年。 創建Date對象 var dateO ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...