[英]MVC Wiring; View and Model
根據這個答案,從視圖中調用模型似乎沒問題。
現在我的問題是,布線怎么樣?
控制器會將模型工廠傳遞給視圖嗎? (我認為這會破壞這個問題的目的,因為除非我理解錯誤,否則必須繞過控制器才能這樣做)
要么
在視圖傳遞給控制器之前,View是否會在View的構造函數中注入模型工廠?
乍一看,我沒有看到問題。 讓我們來看看替代方案:
將原始模型傳遞到視圖中,鍵入提示通用模型接口
從表面上看,這似乎沒問題。 但是,如果你的模型在api中不一致(例如$model->getPerson($id)
,這很可能),這實際上是將控制器模型和視圖緊密耦合在一起。
由於您的視圖無法真正接受任何模型,因此從控制器注入原始模型可能有點過於自由,並且在未來的道路上打開了不一致或奇怪錯誤的大門。
將原始模型傳遞到視圖中,鍵入提示所需的模型類
這解決了先前解決方案中的自由度問題,因為只有正確的模型才能通過。 但是現在你進一步將視圖與該模型結合起來了。 所以這不好。
在視圖中實例化模型。
這也不是一個理想的解決方案,因為現在您無法模擬您的模型進行測試,並將視圖完全耦合到模型中。 明確的SOLID違規。
所以這基本上是注入模型的工廠。 它允許視圖確定它需要哪個模型(因此從工廠請求)。 它允許模擬模型(通過交換不同的工廠)。 它還允許通過調整工廠返回的內容來傳遞任意模型。
因此,依賴關系現在松散耦合,而您依賴於工廠(這是一個更好的依賴)。
這是我的第一個想法。 我需要進一步思考,看看是否有一個更清潔的解決方案,但你有它......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.