今天在工作中有人试图说服我:
{$obj->getTableInfo()}
对于 smarty/mvc/template 来说很好,因为它使用对象方法。我争辩说,因为它调用了数据库,所以它没有地方存在,它应该在控制器中(我们实际上并不使用 MVC)。我对 MVC 和模板中使用的逻辑分离的理解是否正确?或者有什么我想念的吗?
今天在工作中有人试图说服我:
{$obj->getTableInfo()}
对于 smarty/mvc/template 来说很好,因为它使用对象方法。我争辩说,因为它调用了数据库,所以它没有地方存在,它应该在控制器中(我们实际上并不使用 MVC)。我对 MVC 和模板中使用的逻辑分离的理解是否正确?或者有什么我想念的吗?
你是对的。他错了。
如果您想正确执行 MVC,则无论以何种形式的数据库调用都应该存在于控制器中。
显然,人们会为它应该是什么而小便并做这样的事情,但这不是正确的方法。
好吧,没有“官方”规则或任何东西,但我认为类似的东西属于控制器。除了显示变量之外,我在视图代码中不做任何事情,没有比允许使用if
或foreach
-type 循环更复杂的了。当然不会调用访问数据库的函数。这一切都应该由控制器加载,视图应该只决定是否需要显示它。
真的取决于它的上下文和范围。
$obj 是控制器还是模型层?这应该回答我认为它是否有效。
作为对阅读其他答案的回应。
函数名称本身就是一个简单的 getter 方法。它可以通过控制器层调用数据库。我会说没关系。特别是如果它在内存中使用某种形式的缓存。(即 getter 是 setter,因为您只想在使用一次时缓存它。)