模型中有很多getter和setter

时间:2011-03-06 14:44:16

标签: php codeigniter

我正在将CodeIgniter用于我正在撰写的应用程序,而且我对模型有疑问。

我想弄清楚的是,我是否应该为数据库中的每个字段设置一个getter和setter方法,或者我应该只是拉入整行,然后只需抓取PHP中需要的特定列。我觉得拥有一大堆获取和设置可能会导致某人产生大量不必要的数据库调用。所以我在考虑这个错误或正确吗?每个数据库字段是否应该有自己的get / set或者是浪费?

2 个答案:

答案 0 :(得分:2)

像往常一样,“它取决于”。这取决于您将使用结果的位置 通常,您的查询应该只针对每个请求所需的字段访问数据库。例如“选择field1,来自mytable的field2”而不是“select * from mytable”。然后使用CodeIgniters功能获取字段值 - 例如

$items = $query->result();
foreach ($items as $item) {
  $x = $item->field1;
  $y = $item->field2;
}

但是,如果您将整个“item”对象传递给其他函数,那么您可能需要查询来检索该对象组成的所有列,否则某些函数可能会收到无效数据。

您还可以尝试实现某种形式的“延迟加载”,从而传递原始对象中的一些/大部分数据,然后当方法请求其他字段数据时,getter方法向数据库发出另一个请求以获取新信息。但这可能会变得更加复杂。

因此
- 对于模型或方法中返回特定对象以外的特定对象的简单结果 - 尽可能小地使用查询。 - 对于返回模型的特定对象的方法,然后使用尽可能小的查询来返回该对象的完整信息。

在任何一种情况下 - 让查询返回所需内容。

答案 1 :(得分:0)

我还没有使用CodeIgniter,但这可能是一个更普遍的问题。我相信没有错误或正确。

如果您的数据在进入数据库之前需要某种验证或清理,那么使用setter将是一个很好的解决方案。此外,如果您的原始数据在整个应用程序中使用之前需要进行转换,那么您可能会使用getter来避免不必要的重复代码。

否则我认为提取行是绝对可以的,即使在他们这样做的CodeIgniter User Guide中也是如此。