私は授業を書いてきましたが、最初は授業デザインパターンに従っていると思っていましたが、修正してから実際にどのパターンにマッチしているのか不思議です。これはどのようなデザインパターンですか?
基本的な例は、FacebookのAPIをクエリしてページのフィードを取得するためのクラスです。私のクラスには、次のようになります。
class FetchPageFeedCommand extends Command {
public $feed;
private $pageId;
public function __construct($pageId) {
$this->pageId = $pageId;
}
public function execute() {
if ($feed = Facebook::api('/page/feed') /* psuedo code */) {
$this->feed = $feed;
return true;
} else {
return false;
}
}
}
は、私は、このようなクラスを使用します。
$com = new FetchPageFeedCommand(12345);
if ($com->execute()) {
$feed = $com->feed;
print_r($feed);
}
私が理解から、Commandオブジェクトは私にはないレシーバ・オブジェクトを、取る必要があります。そして、私のクライアントと呼び出し元の両方が同じようです。それにパブリック変数でデータをペイロードするという事実を加えてください。これは、これが明らかにCommandパターンと一致しないように感じます。
さらに問題を混乱させるために、私はコマンドスーパークラスにいくつかの機能を追加しました。これにより、発生したエラーを追跡していきます。たとえば:
public function execute() {
if ($feed = Facebook::api('/page/feed') /* psuedo code */) {
$this->feed = $feed;
return true;
} else {
$this->addError('Could not fetch feed'); // Error management
return false;
}
私はその後$com->hasErrors()
と
$com->getErrors()
これまでのところ、このパターンは、私のために非常によく働いているとエラーをテストします。私は、デザインパターンの詳細が常に石で書かれているわけではなく、セマンティクスを心配するよりも問題を解決することが重要であることを知っていますが、私は本当に興味があり、コードを改善できるかどうかを知りたいまたは私が何とか自分自身を墓を掘っている場合)。
もラベルにハングアップを取得しないようにしてください。これらのパターンは、初めてプロジェクトに参加するとき、またはプロジェクトを設計するときに、オブジェクトから期待されるものを簡単に知ることができるように設計されています。私はコマンドが十分に近いと言うでしょう。たぶんあなたはこの風味を自分の名前にするべきでしょうか?フィールドコマンド? lol – DampeS8N
古来の知恵は、まずパターンを覚えなければならない、パターンを忘れなければならないということです。そうすれば真のマスターになります。 –
@Bill Yang - あ、とても禅。私はそれが好きです。 –