OOP:一个类用于数据库表,一个类用于数据库表行


OOP : One class for database table, one class for database table row

目前,我为每个数据库表构建两个类。例如,如果我有表person,我将有类Person_ListPerson

从设计角度看,是不是更好?

  1. for Person_List输出Person数组;或
  2. 用于输出包含表中行数组的数组。

性能方面,哪个更好?

我相信设计明智,并考虑到性能,将是(如果您坚持使用Person_List类来表示表和Person来表示单个记录):

  • Person_List类使用 Iterator 接口,因此您可以遍历表,而不需要一次拉出所有记录(在某些情况下,这应该是显著的性能增益),
  • 另外使用 Countable 接口Person_List类,所以你可以计数所有的结果,如果有必要,通过直接从数据库

这应该给你灵活性,允许你像使用数组一样使用Person_List类对象。

如果你在使用这两个接口时仍然有问题,这里有一些解释:

  • 每次执行foreach ($table as $record)(其中$tablePerson_List的实例)时,Person_List类的current()方法将被调用(因为它是Iterator接口的一部分-参见这里的文档),它应该返回Person类的对象;这应该用eg。mysql_fetch_object();
  • 当您调用count($table)(其中$tablePerson_List的实例)时,将调用Person_List类的count()方法,该方法反过来可以使用eg。mysql_num_rows()函数返回所有结果,而不是从数据库中取出它们,然后计数(这将再次显著的性能增益),

这实际上取决于您对记录做了什么。访问记录上的列应该不会比使用数组快多少。不足以证明不使用对象

数组比对象更轻(尤其是在内存中更小),但是如果你像@Tadeck提到的那样使用Iterator,这应该不是问题,因为你一次只有一个实例在内存中。

总之,对象几乎总是更好的设计(从接口的角度来看),但是,如果从性能的角度不确定,请对候选实现进行基准测试。如果差异不够明显,可以使用对象。

你标记了这个OOP,所以我猜你想使用对象。在这种情况下,你会想让它返回PersonRow对象,例如,在db表中表示一行的对象。看一下

  • RowData网关模式
  • 行数据网关模式的描述

你不应该担心性能。想出一个可靠的设计,可读性和可维护性。只有当你把你的设计付诸实践,对它进行分析,发现它不符合性能要求时,才会担心性能。