OOP中的大型对象列表?

时间:2015-10-10 10:04:23

标签: php oop

所以我认为打印对象列表的常用方法是使用一些Collection Class或者返回要列出的对象的id的东西,然后为每个id启动一个对象,然后列出它们。

这真的是最好的方法吗? 这意味着在后台执行一次数据库查询以获取ID,然后在启动时执行每个对象的其他数据库查询。

当然,使用小型列表时没问题。但是在大型列表中,这意味着DB负载很重,没有?

有更好的方法吗?

(我希望这不是一个愚蠢的问题......对OOP而言是新的;)

编辑:

好的,很抱歉,如果这还不够清楚的话。 (也许是因为我接近这一切都错了) 我们说我的桌子上有我所有的产品。现在我想列出它们......但是在将产品属性输出到列表之前我需要进行一些数据转换。此数据转换(通常)由产品对象处理。

愚蠢的例子:

$product->replaceBadWordsInDescription();

现在,为了能够在我的列表中使用这些功能,我需要为列表中的每个产品都有一个产品对象实例,对吗?

我认为flyweight模式可能是一种方式。我会读到它。

2ND编辑:

我试图将我的问题简化为具体问题。 (使用列表示例)但通常,在处理同一类的许多对象时,最佳做法是启动每个对象并使用它的构造函数(或工厂)来填充它的属性。 DB,或者有更好的方法吗?

让一个查询为我们想要创建的所有对象重新调整所有属性,然后将它们传递给对象启动会不会减少资源消耗? (如果我理解正确,这就是flyweight模式的想法)

1 个答案:

答案 0 :(得分:2)

不要将此视为答案,不仅仅是提示要考虑的内容

如果您只想打印数据列表,为什么要使用对象?

你的ObjectsClass方法准备数据还是getter / setter?

主题:https://en.wikipedia.org/wiki/Flyweight_pattern

为什么先拉出一个id列表,然后从DB中提取每个id数据?

主题:http://php.net/manual/de/mysqlinfo.concepts.buffering.php

在PHP中你不需要任何动作[比如从DB获取samekind的数据并打印它]对象。

我想要尝试的东西,也可以从无缓冲的 mysql查询中获取数据。

希望有所帮助。

如果没有,你必须详细解释你真正想做的事情!

编辑:

  

此数据转换(通常)由产品对象处理。   愚蠢的例子:\ $ product-> replaceBadWordsInDescription();   现在,为了能够在我的列表中使用这些功能,我需要为列表中的每个产品提供>产品对象实例,对吗?

实际上,您可以创建一个进行转换的Object。并将数据库中的获取数据提供给该对象方法,如:

$prepared_row = $productTransformator->replaceBadWordsInDescription($fetched_row);

返回的 prepared_row 可以是没有方法的flyweight对象实例!

为什么,如果您的产品对象有很多方法,那么您将拥有大量的内存使用和流程来创建一个对象实例的foreach行。

所以制作两个班级:

一个准备给定数据(Transformator Instance)和一个只保存数据(Flyweight Instance)而没有任何方法的数据。

但我只是将数据处理为数组,并在此处使用对象,转换器实例。

希望给出方向:)

并保持简单和正确: flyweight 在我的示例中,这意味着实例中没有方法。