フレンド。 現在、私は複雑な検索を開発しています。私は次のクラスを持っています:検索クラス。パターンアドバイスリクエスト
App\Search\Search
App\Search\OrderBy\Relevance
App\Search\OrderBy\Priority
App\Search\OrderBy\WordMatch
App \ Search \ Searchは、主な検索クラスです。 \ OrderBy内のすべてのクラスは、クエリービルダーオブジェクトを参照して、いくつかのロジックを適用しています。ここで
は、いくつかのコードサンプルです:
//App\Search\Search
Class Search {
protected $query;
public function __construct($phrase)
{
$this->phrase = $phrase;
$this->query = App\Airport::newQuery();
}
public function orderByRelevance()
{
OrderBy\Relevance::apply($this->query);
return $this;
}
public function orderByPriority()
{
OrderBy\Priority::apply($this->query);
return $this;
}
public function orderByWordMatch()
{
OrderBy\WordMatch::apply($this->query);
return $this;
}
}
主なアイデアは、このように、条件付きでクエリに複数の順序を適用することです:
$search = new Search('Berlin');
$search->orderByRelevance()->orderByPriority()->get();
ので、コードがうまく動作しますが、私はいくつかを感じます特に、すべての注文メソッドを手動で宣言する際には、そのコードの臭いがあります。 Searchクラスを改善するパターンやトリックはありますか?これは、あなたは追加のメソッドに追加して、クエリオブジェクトをアップ-build-ということでBuilder Patternある