軟體系統設計 - Low Level Design 概念

Photo by David Vig on Unsplash

軟體系統設計 - Low Level Design 概念

·

1 min read

低階設計 (Low-Level Design, LLD) 是軟體開發過程中一個重要的階段,它緊接在高階設計 (High-Level Design, HLD) 之後。HLD 定義了系統的整體架構和主要組件,而 LLD 則深入探討這些組件的內部細節,包含類別、方法、資料結構、演算法等等。簡單來說,HLD 是系統的藍圖,LLD 則是建築的施工圖。

低階設計的目標

  • 詳細描述每個模組或組件的實作細節:LLD 旨在提供足夠的資訊,讓開發者能夠直接根據設計來編寫程式碼。

  • 確保程式碼的可維護性、可擴展性和可讀性:良好的 LLD 可以減少程式碼的複雜度,使其更容易理解、修改和維護。

  • 提高程式碼的效率和效能:LLD 需要考慮演算法的選擇、資料結構的設計等因素,以確保程式碼的執行效率。

  • 降低開發風險:透過詳細的設計,可以及早發現潛在的問題,減少後續開發階段的錯誤和返工。

設計原則及方式

  • 物件導向程式設計 (Object-Oriented Programming, OOP):一種程式設計範式,使用「物件」作為程式的基本單元,物件包含資料(屬性)和操作資料的方法(方法)。OOP 的四大基本原則是:

    • 封裝 (Encapsulation):將資料和操作資料的方法包裝在一個單元(物件)中,隱藏內部的實作細節,只透過介面與外部互動。

    • 繼承 (Inheritance):允許一個類別(子類別)繼承另一個類別(父類別)的屬性和方法,達到程式碼的重複使用和擴展。

    • 多型 (Polymorphism):允許使用相同的介面來操作不同類型的物件,根據物件的實際類型執行不同的行為。

    • 抽象化 (Abstraction):隱藏複雜的實作細節,只呈現必要的介面給使用者,簡化程式的設計和使用。

  • SOLID 原則:五個物件導向設計的原則,旨在提高程式碼的可維護性、可擴展性和可讀性:

    • 單一職責原則 (Single Responsibility Principle, SRP):一個類別應該只有一個引起它變化的原因。

    • 開放/封閉原則 (Open/Closed Principle, OCP):軟體實體(類別、模組、函式等)應該是開放擴展的,但是關閉修改的。

    • 里氏替換原則 (Liskov Substitution Principle, LSP):子類別應該能夠替換它們的父類別,而不會影響程式的正確性。

    • 介面隔離原則 (Interface Segregation Principle, ISP):不應該強迫一個類別實作它不需要的介面。

    • 依賴反向原則 (Dependency Inversion Principle, DIP):高層模組不應該依賴於低層模組,它們都應該依賴於抽象;抽象不應該依賴於細節,細節應該依賴於抽象。

  • DRY 原則 (Don't Repeat Yourself):避免程式碼重複,相同的邏輯應該只存在於一個地方。

  • YAGNI 原則 (You Ain't Gonna Need It):不要過度設計,只實作目前需要的東西。

  • KISS 原則 (Keep It Simple, Stupid):保持設計簡單明瞭。

低階設計的產出

LLD 的主要產出通常包含以下內容:

  • 類別圖 (Class Diagrams):描述系統中各個類別的屬性、方法以及它們之間的關係,例如繼承、關聯、聚合等。

  • 序列圖 (Sequence Diagrams):描述物件之間互動的順序,展示訊息的傳遞和方法的呼叫。

  • 狀態圖 (State Diagrams):描述物件在不同狀態之間的轉換以及觸發轉換的事件。

  • 資料庫綱要 (Database Schema):定義資料庫的表格、欄位、資料類型以及關聯。

  • 演算法和資料結構的描述:詳細說明使用的演算法和資料結構,以及選擇它們的原因。

  • 介面規格 (Interface Specifications):定義不同模組或組件之間互動的介面。

  • 錯誤處理和異常處理的策略:描述如何處理程式碼中可能發生的錯誤和異常情況。

低階設計的重點

  • 設計模式 (Design Patterns):使用常見的設計模式可以解決重複出現的問題,提高程式碼的品質和效率。

  • SOLID 原則:遵循 SOLID 原則可以提高程式碼的可維護性和可擴展性。

  • 程式碼風格和命名規範:一致的程式碼風格和命名規範可以提高程式碼的可讀性。

  • 效能考量:選擇合適的演算法和資料結構,以及考慮程式碼的執行效率。

總結

低階設計是軟體開發過程中不可或缺的一環,它將高階設計的抽象概念轉化為具體的實作細節,為程式碼的編寫提供了明確的指導。良好的 LLD 可以提高程式碼的品質、效率和可維護性,降低開發風險,是成功開發軟體系統的重要基石。