今天在工作中,有人试图说服我:
{$obj->getTableInfo()}
适用于smarty / mvc / templating,因为它使用的是对象方法。我认为,因为它调用数据库它没有位置,它应该在控制器中(我们实际上不使用MVC)。我是否正确理解MVC中使用的逻辑分离以及模板化中的逻辑分离?或者有什么我想念的东西?
答案 0 :(得分:5)
如果你想正确地进行MVC,数据库调用,无论采用何种形式,都应该存在于控制器中。
很明显,人们都在为应该做什么而烦恼并做这样的事情,但这不是正确的方法。
答案 1 :(得分:1)
嗯,没有“官方”规则或任何东西,但我认为这样的东西属于控制器。除了显示变量之外,我的视图代码中没有做任何事情,只允许使用if
或foreach
类型循环。当然不会调用访问数据库的函数。这应该全部由控制器加载,视图应该只决定是否需要显示它。
答案 2 :(得分:0)
真的取决于它的背景和范围。
$ obj是控制器还是模型层?在我看来,这应该回答它是否有效。
回应阅读其他答案。
函数名称本身就是一个简单的getter方法。它可以通过控制器层调用db。我会说的还可以。特别是如果它在内存中使用某种形式的缓存。 (即getter是setter,因为你只想在使用一次时缓存它。)