[英]MVC Wiring; View and Model
根据这个答案,从视图中调用模型似乎没问题。
现在我的问题是,布线怎么样?
控制器会将模型工厂传递给视图吗? (我认为这会破坏这个问题的目的,因为除非我理解错误,否则必须绕过控制器才能这样做)
要么
在视图传递给控制器之前,View是否会在View的构造函数中注入模型工厂?
乍一看,我没有看到问题。 让我们来看看替代方案:
将原始模型传递到视图中,键入提示通用模型接口
从表面上看,这似乎没问题。 但是,如果你的模型在api中不一致(例如$model->getPerson($id)
,这很可能),这实际上是将控制器模型和视图紧密耦合在一起。
由于您的视图无法真正接受任何模型,因此从控制器注入原始模型可能有点过于自由,并且在未来的道路上打开了不一致或奇怪错误的大门。
将原始模型传递到视图中,键入提示所需的模型类
这解决了先前解决方案中的自由度问题,因为只有正确的模型才能通过。 但是现在你进一步将视图与该模型结合起来了。 所以这不好。
在视图中实例化模型。
这也不是一个理想的解决方案,因为现在您无法模拟您的模型进行测试,并将视图完全耦合到模型中。 明确的SOLID违规。
所以这基本上是注入模型的工厂。 它允许视图确定它需要哪个模型(因此从工厂请求)。 它允许模拟模型(通过交换不同的工厂)。 它还允许通过调整工厂返回的内容来传递任意模型。
因此,依赖关系现在松散耦合,而您依赖于工厂(这是一个更好的依赖)。
这是我的第一个想法。 我需要进一步思考,看看是否有一个更清洁的解决方案,但你有它......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.