2011-08-28 66 views
1

我见过很多人在谈论MVC作为Web应用程序的可扩展解决方案。但是我有一些关于MVC的问题。我已经阅读过多个网站,使用静态对象导致程序编程,而不是远离MVC。PHP中的OOP:关于MVC中的静态使用

你认为这是真的吗?如果是这样,将使用单身模式解决这个问题?

+0

这应该解释为什么你不想使用静态方法:http://kore-nordmann.de/blog/0103_static_considered_harmful.html - 虽然与MVC没有任何关系。简而言之:良好的面向对象具有低耦合性和高内聚性。静力学导致完全相反。 – Gordon

回答

2

我觉得Symfony2已经很好地解决了这个问题。它不是声明静态类,而是使用所谓的“服务” - 有一个中央管理器,它包含所有服务及其配置。在代码的不同部分,您可以从容器中获取服务。容器总是提交所需任何类的相同实例(除非在配置中另有指定),这意味着单例模式几乎不需要。

官方文档使解释更好,所以这里是关于Symfony's Service Container的链接。

我敢打赌,其他框架也使用类似的方法来摆脱有需要使用单身人士。

+0

这是我在框架中使用的东西。不知道Symfony使用这样的东西。那么,我现在知道该用什么。 – D1Error

2

使用静态物体导致的过程式编程,这就是远 远离MVC

这是没有意义的。 MVC是一种将应用程序的功能分离为离散层的方法。使用MVC设计与你的对象是否是静态的,或者是否使用单例无关。事实上,没有什么说MVC设计甚至必须是面向对象的。

关于使用单例的大多数评论处理编写单元测试的困难。有关更多详细信息,请参阅https://stackoverflow.com/questions/3876951/why-is-it-hard-to-unit-test-singletons