기사를 작성하는 시스템이 있다고 가정 해 봅니다. 이러한없이다양한 구성 요소/모듈에 대한 공장 패턴 사용
$title = 'title';
$description = 'Description in html';
//Cleaner just clean some things from each field.
$cleaner = new Cleaner();
//Validator throw exception if something is not correct
$validator = new Validator();
// Storage save files and article itself
$storage = new Storage();
//Dom Class get some files from description field
$dom = new Dom();
$files = $dom->getFiles($description);
$storage->files($files);
$article = new ArticleBuilder();
$article->addTitle($validator->title($cleaner->title($title)));
$article->addDescription($validator->description($cleaner->description($description)));
$article->add....
이 기사를 구축하는 것은 불가능 :이 기사는 내가 각 구성 요소를 인스턴스화해야 기사를 구축하기 위해 클라이언트에서 .... 일부 구성 요소 검사기, 청소기, 저장있다.
내 질문은 :
: 클라이언트의 class ArticleFactory
{
private $article;
public function __construct()
{
$this->article = new ArticleBuilder();
}
public function setTitle(string $title)
{
$title = ($this->validator())->title($title);
$title = ($this->cleaner())->title($title);
$this->article->addTitle($title);
}
public function setDescription(string $des)
{
$des = ($this->validator())->title($des);
$des = ($this->cleaner())->title($des);
$this->article->addDescription($des);
}
public function getArticle(): ArticleBuilder
{
return $this->article;
}
public function getFiles($description)
{
return ($this->dom())->getFiles($description);
}
public function storeFile($files)
{
($this->storage())->files($files);
}
public function validator(): ValidatorInterface
{
return new Validator();
}
public function cleaner(): CleanerInterface
{
return new Cleaner();
}
public function storage(): StorageInterface
{
return new Storage();
}
public function dom(): DomInterface
{
return new Dom();
}
}
위 공장 기사를 작성하는 것이 더 편리하다 :가 내가 이런 식으로이 모두를 만들기 위해 공장 패턴을 사용할 수
$myTitle = 'my title';
$myDes = 'mty description';
$article = new ArticleFactory();
$article->setTitle($myTitle);
$article->setDescription($myDes);
$files = $article->getFiles($description);
$article->storeFile($files);
이것은 단단한 원칙에 위배됩니까?
더 좋은 방법이 있습니까?
** 공장 패턴을 사용하여이 모든 것을 만들 수 있습니까 ** 물론 할 수 있습니다. 문제는 얼마나 유용 할 것인가입니다. 그리고 우리는 당신이 제로 컨텍스트를 제공했기 때문에 수정 구슬을 물어볼 필요가 있습니다. – Euphoric
나는 이것을 너무 잘 이해하지 못한다. 'ArticleFactory'가 있지만'Validator','Cleaner' 및'Storage' 유형을 반환합니다. 이러한 '파생물'의 파생물이나 의존성은 있습니까? –
나는 내 대답을 업데이 트했습니다. 네가 뭔가 더 원하면 알려줘. 고마워요 –