0

私は現在、私のウェブサイトの構造設計に関して行き詰まっています。現時点では、オブジェクトを使用してサイトの構造を簡素化しています (人物オブジェクト、当事者オブジェクト、役職オブジェクトなどがあります)。理論的には、これらのそれぞれは、データベース。

私が学んだことから、OO Design は物事をシンプルで使いやすく実装しやすくするのに適しています。これには同意します。これにより、コードが非常にきれいになり、保守が容易になりますが、私が混乱しているのは、その方法です。オブジェクトをデータベースにリンクします。

個人ページがあるとしましょう。1 つの mysql クエリに相当する人物オブジェクトを作成しますが (これは合理的です)、その人物は複数の役職を持っている可能性があり、それらを取得して 1 つのページに表示する必要があります。

私が現在行っているのは、mysql からデータを取得し、データを配列として渡す、行ごとに個別の位置オブジェクトを作成する person オブジェクトからgetPositionsというメソッドを使用することです。これにより、クエリは最小限に抑えられます (1 ページに 2 つ) が、これは恐ろしい実装のように思えます。複数の場所) しかし、別の方法はもっと悪いです。

この場合の代替手段は、必要な ID を取得してから別の位置を作成し、ID を渡して、コンストラクターでデータベースから行を取得することです。ページごとに 20 の位置がある場合、すぐに合計できます。ページごとのクエリ数が多く、CPU 使用率が高いことで、Wordpress がどれだけ批判されているかについて読んだことがあります。この場合、もう 1 つ考慮する必要があるのは並べ替えです。この方法で行うと、PHP を使用してデータを並べ替える必要があります。これは、mysql でネイティブに行うほど効率的ではありません。

もちろん、ページはキャッシュされます (キャッシュされる可能性もあります) が、私には、これは貧弱に構築されたアプリケーションの不正行為のように思えます。この場合、正しい解決策は何ですか?

4

1 に答える 1

0

あなたが現在行っている方法は、少なくとも正しい軌道に乗っています。子への参照を持つ親オブジェクトに配列を持つことは、基本的にデータベースでデータがどのように表現されるかです。

あなたの質問から、子を参照として親の配列に保存しているかどうかは完全にはわかりませんが、そうする必要があり、それがPHPがデフォルトでそれらを保存する方法です。データベースからプルされたオブジェクトにシングルトン パターンも使用する場合、質問で提案しているように、1 つの行を変更するために複数のオブジェクトを変更する必要はありません。

おそらく、オブジェクトの複数のコンストラクターを (新しいインスタンスを返す静的メソッドを使用して) 作成して、それらの ID からそれらを作成し、それらにデータをプルさせるか、既存のデータからそれらを作成できるようにする必要があります。後者のケースは、子を作成するときに使用されます。親にその子のすべてのデータをプルさせ、1 つのクエリのみを使用してすべてのデータを作成することができます。ID から子を取得することは、おそらく別の場所で使用されるため、必要に応じて取得するだけで十分です。

並べ替えのために、メイン配列が参照する同じオブジェクトへの参照を使用して、特定の方法で並べ替えられた子を持つ追加のプライベート (または必要に応じてパブリック) 配列を作成できます。

于 2013-02-26T15:13:43.750 に答える