簡體   English   中英

MVC接線; 查看和模型

[英]MVC Wiring; View and Model

根據這個答案,從視圖中調用模型似乎沒問題。

我可以從視圖中調用模型嗎?

現在我的問題是,布線怎么樣?

控制器會將模型工廠傳遞給視圖嗎? (我認為這會破壞這個問題的目的,因為除非我理解錯誤,否則必須繞過控制器才能這樣做)

要么

在視圖傳遞給控制器​​之前,View是否會在View的構造函數中注入模型工廠?

乍一看,我沒有看到問題。 讓我們來看看替代方案:

  1. 將原始模型傳遞到視圖中,鍵入提示通用模型接口

    從表面上看,這似乎沒問題。 但是,如果你的模型在api中不一致(例如$model->getPerson($id) ,這很可能),這實際上是將控制器模型和視圖緊密耦合在一起。

    由於您的視圖無法真正接受任何模型,因此從控制器注入原始模型可能有點過於自由,並且在未來的道路上打開了不一致或奇怪錯誤的大門。

  2. 將原始模型傳遞到視圖中,鍵入提示所需的模型類

    這解決了先前解決方案中的自由度問題,因為只有正確的模型才能通過。 但是現在你進一步將視圖與該模型結合起來了。 所以這不好。

  3. 在視圖中實例化模型。

    這也不是一個理想的解決方案,因為現在您無法模擬您的模型進行測試,並將視圖完全耦合到模型中。 明確的SOLID違規。

所以這基本上是注入模型的工廠。 它允許視圖確定它需要哪個模型(因此從工廠請求)。 它允許模擬模型(通過交換不同的工廠)。 它還允許通過調整工廠返回的內容來傳遞任意模型。

因此,依賴關系現在松散耦合,而您依賴於工廠(這是一個更好的依賴)。

這是我的第一個想法。 我需要進一步思考,看看是否有一個更清潔的解決方案,但你有它......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM