在MVC中模型該如何建構?
在MVC中,模型代表應用程式的業務邏輯和資料。它封裝了特定領域的邏輯和規則,使應用程式能夠在不依賴 UI 或控制器的情況下執行任務並做出決策。
模型的概念:
模型不是類別或物件。它是由三個主要元素組成的層:
- 域物件:表示業務實體並包含特定於問題域的邏輯。
- 資料映射器:處理資料持久性以及與外部儲存的交互,例如資料庫。
- 服務:編排領域物件與資料映射器之間的交互,提供與業務交互的更高層級的介面logic.
關注點分離:
- 模型層與UI層(視圖和控制器)分離.
- 與模型的通訊僅透過服務進行,確保明確的關注點分離並防止域邏輯洩漏到UI 或控制器中程式碼。
- 這種分離促進了單一職責原則 (SRP)、靈活性和更容易的可測試性。
存取模型:
- 在視圖和控制器中,您可以使用 Symfony 的 DI 容器或Auryn。
- 服務可以注入到建構函式中或透過工廠存取。
- 此方法確保所有必要的服務可供這些元件使用。
修改模型狀態:
- 控制器負責處理使用者輸入並修改模型狀態。
- 它們呼叫服務方法,服務方法又與網域物件和資料映射器互動以執行必要的邏輯操作。
資料持久性:
- 域物件代表業務實體,但不知道儲存。
- 資料映射器處理資料持久性和從外部檢索儲存。
- 這種分離允許業務邏輯保持獨立於所使用的特定儲存技術。
分離的好處:
- 透過為每一層分配明確的職責來強制實施SRP。
- 透過隔離業務來提高程式碼的可讀性和可測試性邏輯。
- 提供修改業務邏輯或資料儲存的彈性,而不影響其他元件。
- 透過提供用於存取模型服務的一致介面來簡化外部 API 的開發。
附加註解:
- 資料庫表並非總是直接對應到網域物件和資料對應器。
- 視圖不是模板,但處理表示邏輯和模板選擇。
- 每個頁面或螢幕的視圖和控制器之間應該有 1:1 的關係。