1

今天在工作中有人试图说服我:

{$obj->getTableInfo()}

对于 smarty/mvc/template 来说很好,因为它使用对象方法。我争辩说,因为它调用了数据库,所以它没有地方存在,它应该在控制器中(我们实际上并不使用 MVC)。我对 MVC 和模板中使用的逻辑分离的理解是否正确?或者有什么我想念的吗?

4

3 回答 3

5

你是对的。他错了。

如果您想正确执行 MVC,则无论以何种形式的数据库调用都应该存在于控制器中。

显然,人们会为它应该是什么而小便并做这样的事情,但这不是正确的方法。

于 2009-05-05T03:21:06.430 回答
1

好吧,没有“官方”规则或任何东西,但我认为类似的东西属于控制器。除了显示变量之外,我在视图代码中不做任何事情,没有比允许使用ifforeach-type 循环更复杂的了。当然不会调用访问数据库的函数。这一切都应该由控制器加载,视图应该只决定是否需要显示它。

于 2009-05-05T03:20:48.410 回答
0

真的取决于它的上下文和范围。

$obj 是控制器还是模型层?这应该回答我认为它是否有效。

作为对阅读其他答案的回应。

函数名称本身就是一个简单的 getter 方法。它可以通过控制器层调用数据库。我会说没关系。特别是如果它在内存中使用某种形式的缓存。(即 getter 是 setter,因为您只想在使用一次时缓存它。)

于 2009-05-05T03:23:47.233 回答