解鎖清晰代碼-每位開發者的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
  • 示例項目結構 在 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# ...