지난 며칠간 저는 처음에 커맨드 디자인 패턴을 고수했다고 생각한 클래스를 작성했지만, 그 이후로 수정 한 적이 있습니다. 그리고 어떤 패턴이 실제로 일치하는지에 대해 궁금합니다.어떤 디자인 패턴입니까?
기본 예제는 Facebook 피드에 페이지 피드를 가져 오도록 쿼리하는 데 사용하는 클래스입니다. 내 클래스는 다음과 같습니다
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 superclass에 몇 가지 기능을 추가하여 발생하는 오류를 추적하도록하겠습니다. 예를 들어 :
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()
지금까지이 패턴이 나를 위해 꽤 잘 작동되었습니다와 오류를 테스트합니다. 나는 디자인 패턴의 세부 사항이 항상 돌로 쓰여진 것은 아니며, 의미를 걱정하는 것보다 문제를 해결하는 것이 더 중요하다는 것을 알고 있지만, 나는 진정으로 궁금해하며 코드를 개선 할 수 있는지보고 싶어한다. 또는 나는 어떻게 든 나 자신을 무덤에 파고있다).
하는 것은 너무 얻을 라벨을 끊었하지보십시오. 이 모든 패턴은 처음 프로젝트에 올 때 또는 객체를 만들 때 객체에서 기대하는 것을 쉽게 알 수 있도록 설계되었습니다. 나는 Command가 충분히 가깝다고 말한다. 어쩌면 당신은이 맛을 자신의 이름으로 주어야합니까? 필드 명령? lol – DampeS8N
고대의 지혜에 의하면, 먼저 패턴을 배워야하고 패턴을 잊어 버려야합니다. 그러면 당신은 진정한 주인이되기 시작합니다. –
@Bill Yang - 아, 매우 젠. 나는 그것을 좋아한다. –