gpt4 book ai didi

php - MVC 布线; View 和模型

转载 作者:搜寻专家 更新时间:2023-10-31 21:15:19 26 4
gpt4 key购买 nike

根据this answer,从 View 中调用模型似乎是可以的。

Can I call a Model from a View?

现在我的问题是,布线会是什么样子?

Controller 会将模型工厂传递给 View 吗? (我认为这会破坏这个问题的目的,因为除非我理解错误,否则它必须绕过 Controller 才能做到这一点)

或者

在将 View 传递给 Controller ​​之前, View 是否会在 View 的构造函数中注入(inject)模型工厂?

最佳答案

乍一看,我看不出这有什么问题。让我们来看看备选方案:

  1. 将原始模型传递到 View 中,类型提示关闭通用模型接口(interface)

    从表面上看,这似乎没问题。但是,如果您的模型在它们的 api 中不一致(例如 $model->getPerson($id),这很有可能),这会有效地将 Controller 模型和 View 紧密耦合在一起。

    由于您的 View 不能真正接受任何模型,因此从 Controller 注入(inject)原始模型可能有点过于自由,并为以后出现不一致或奇怪的错误打开了大门。

  2. 将原始模型传递到 View 中,键入提示所需的模型类

    这解决了先前解决方案中的自由问题,因为只有正确的模型才能通过。但现在您已将 View 进一步耦合到该模型。所以这不好。

  3. 在 View 中实例化模型。

    这也不是一个理想的解决方案,因为现在您无法模拟模型进行测试,也无法将 View 与模型完全耦合。明确的 SOLID 违规行为。

这样基本上就剩下注入(inject)模型的工厂了。它允许 View 确定它需要哪个模型(因此向工厂请求)。它允许模拟模型(通过交换不同的工厂)。它还允许通过调整工厂返回的内容来传递任意模型。

因此,依赖关系现在是松散耦合的,您反而依赖于工厂(这是一个更好的依赖关系)。

这是我的第一个想法。我需要进一步考虑,看看是否有更清洁的解决方案,但你已经找到了......

关于php - MVC 布线; View 和模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10150903/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com