2012-04-14 40 views
3

根据这个答案,从视图中调用模型似乎没问题。MVC接线;视图和模型

Can I call a Model from a View?

现在我的问题是,如何将接线样子?

控制器会将模型工厂传递给视图吗? (我认为会破坏这个问题的目的,因为它会为了做到这一点,除非我理解错绕过控制器)

或者

会查看在注射模型厂View的构造函数在视图传递给控制器​​之前?

+0

这*可能取决于你的框架 – Michelle 2012-04-14 04:19:21

+0

取决于抽象层次VS.您正在寻找的性能可能会考虑使用依赖注入框架,该框架能够根据模型创建视图中的数据,以便查看映射。 (请参阅:http://en.wikipedia.org/wiki/Dependency_injection)另外,您实际使用的是什么MVC? – 2012-04-14 04:19:58

+0

@ResistDesign我只是在研究MVC框架,我没有看到太多的代码,所以我想知道它的样子。 – Tek 2012-04-14 04:24:45

回答

2

乍一看,我看不出有什么问题。让我们走过的替代品:

  1. 传递的原始模型到视图,类型提示关闭通用模型接口

    从表面上看,这似乎确定。但是,如果您的模型在其apis中不一致(例如$model->getPerson($id),这很可能),这实际上将控制器模型和视图紧密耦合在一起。

    由于您的观点无法真正接受任何模型,因此从控制器注入原始模型可能有点过于自由,并且会打开通向未来的不一致或奇怪错误的大门。

  2. 跑过原始模型到视图,类型暗示断开所需的模型类

    这解决了由现有溶液liberalness问题,只有正确的模型可以被传递。但是现在你已经将这种观点与这种模式进一步结合了。所以这不太好。

  3. 实例化视图内的模型。

    这也不是一个理想的解决方案,因为现在你不能嘲笑你的模型进行测试,并将视图完全耦合到模型。一个明确的SOLID侵犯。

因此,基本上是留下注入模型的工厂。它允许视图确定它需要哪个模型(并因此从工厂请求)。它允许模型被嘲笑(通过交换不同的工厂)。而且它还允许通过调整工厂返回的内容来传递任意模型。

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

这是我的第一个想法。我需要进一步思考,看看是否有更清洁的解决方案,但你有它...