1

オブジェクトのリストを作成するための最良の方法について疑問に思っています。

現在、注文を処理するクラスがあります。注文を取得するには、提供された API を呼び出す必要があります。API 呼び出しは、2 つの別々の注文に対して 2 つの別々の呼び出しを行うよりも速く 5000 の注文を返す呼び出しを行うことができるという点で非常に高価です。

このため、クラスを2つの方法で初期化するように構築しました.1つの方法では注文番号を渡すことができ、それ自体を初期化しますが、配列を渡すと、配列のデータを使用してオブジェクトを作成します.

GetOrderList($startDate, $endDate)今、私はAPI への 1 つの呼び出しを行い、返される Order オブジェクトでいっぱいの配列を埋めるような関数を持っているので、それらを使って何かをすることができます。

これは私には「ハッキー」に感じられるので、よりOOPでありながら達成しようとしていることを行う受け入れられた方法があるかどうか疑問に思っていました.

注: これは私がベスト プラクティスを学ぶために使用している個人的なプロジェクトのためのものです。

4

2 に答える 2

1

ケースの中はいい感じです。「より正確」になりたい場合 (いつでも可能です)、Orders のコレクションを管理するクラス メソッドを持つ OrderManager オブジェクトを作成することをお勧めします。呼び出しの例は次のようになります。

<?php
class OrderManager {
    public static function getListByDateRange($startDate, $endDate) {
        // ...
        return $listOfOrders;
    }
}

$orderList = OrderManager::getListByDateRange($startDate, $endDate);
?>

これはメディエータ パターンと呼ばれます。これにより、マネージャー クラスを拡張して、後で他の形式のクエリを実行できるようになります。または、これを頻繁に行う場合は、ジェネリック マネージャー クラスを作成し、サブクラスで動作するオブジェクトのタイプを指定するだけで済みます。

于 2013-05-02T14:42:46.400 に答える
0

それを行うには、ほとんど2つの方法があります。あなたが言ったことの音によって、基本的にオブジェクトの配列 (リスト) を作成している方法があります。OOP の方法は、すべてのオブジェクトを保持する「コンテナー」クラスを (おそらく ArrayObject を拡張するか、SplFixedArray を使用して) 作成することです。次に、保存されているすべてのオブジェクトをループし、必要な機能を適用するイテレータ (おそらく RecursiveArrayIterator) をアタッチできます。

于 2013-05-02T14:41:12.660 に答える