0

だから私は、検索を実行するユーザーからデータを収集することを目標とするプロジェクトに取り組んでいます。検索から収集されるさまざまな種類の情報をオブジェクトとしてモデル化しました。これらのオブジェクトを作成および操作する一種の管理オブジェクトを作成する予定です。

私の質問は、この「管理」オブジェクトを作成するときに考慮すべきパターンや設計上の決定はありますか? 頭に浮かぶことの1つは、このオブジェクトが「検索データ」オブジェクトに密接に結合されることです。これは、メソッド内でそれらを作成および保存する可能性があるためです。

この場合、依存性注入は機能しないと思います。同じオブジェクトの複数のコピーを処理する必要がある可能性があるため、パラメーター リストが何であるかを知ることは不可能です。

あなたの洞察に感謝します。

4

2 に答える 2

1

これらの他のすべてのオブジェクトまたは子が従うか継承するための親クラスまたはパターンを作成するのが最善だと思います。たとえば、特定のオブジェクトのデータを取得または設定したいとします。データ フィールド名が異なる場合、問題が発生します。

というオブジェクトとGoogleSearchというオブジェクトがあるとしますYahooSearch。ユーザーが入力したクエリをメソッドGoogleSearchで取得でき$google->getQuery()、YahooSearch クエリを を使用して取得する$yahoo->getInput()必要がある場合、このような情報が発生するたびに手動で指定しない限り、問題が発生することは明らかです。

しかし、フレームワークを開発する前にこのようなことを考えておくと、すべてを自動化することがはるかに簡単になります。この場合、ユーザー検索からデータのコレクションを構築している場合、すべての検索でいくつかの属性が共有されると言っても過言ではありません。

たとえば、 - 彼らはどの検索エンジンを使用しましたか? - 入力されたクエリは何ですか? - 検索はいつ行われましたか? - どのIPから?- ユーザーは結果の 1 つを選択しましたか? - ユーザーはパソコン、携帯端末、その他で検索しましたか?

これらの最小限の考慮事項があれば、これらすべての属性を組み込むシステムを設計できます。たとえば、これは親クラスである可能性があります。

class Search {
    protected $engine, $query, $when, $who, $browserType;
    function __construct() {
        $this->when = time();
        $this->browserType = $_SERVER['HTTP_USER_AGENT'];
        $this->who = $_SERVER['REMOTE_ADDR'];
    // some more class methods
    }
}

次に、このクラスから継承して、次のような特定の検索タイプを作成できます。

class GoogleSearch extends Search {
    function __construct() {
        // set the engine to Google
        $this->engine = 'Google';
    }
}

考慮すべきその他の事項は、変数のスコープまたは可視性です。protectedここでは、基本的にプライベートであるが、子クラスまたは拡張クラスからアクセスできることを意味するように宣言しました。これがお役に立てば幸いです。他にご不明な点がございましたら、お気軽にお問い合わせください。できる限りお手伝いさせていただきます。

于 2013-03-28T12:58:05.920 に答える
0

こちらの作成パターンリストをご覧になることをお勧めしますhttp://en.wikipedia.org/wiki/Software_design_pattern

抽象ファクトリ、ビルダー、ファクトリ メソッドのすべてが、探しているものに当てはまる可能性があります。依存性注入は、あなたが求めているものには適切な概念ではありません。DI を使用すると、実行時に物事を結び付けたり、依存関係のハードコーディングを削除したりすることが容易になります。本当に同じことではありません。

于 2013-03-28T12:47:35.757 に答える