Disons que nous avons un système qui construit des articles. L'article a quelques validateur composants, plus propre, le stockage .... Dans le client pour construire un article que je dois instancier chaque composant:Utilisation du modèle d'usine pour divers composants/modules
$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....
Sans eux, il est impossible de construire un article.
Ma question est: Puis-je utiliser le modèle d'usine pour créer tous ces comme ceci:
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();
}
}
Dans le client est plus pratique de créer un article avec l'usine ci-dessus:
$myTitle = 'my title';
$myDes = 'mty description';
$article = new ArticleFactory();
$article->setTitle($myTitle);
$article->setDescription($myDes);
$files = $article->getFiles($description);
$article->storeFile($files);
Est-ce que cela viole l'un des principes SOLID?
Y a-t-il une meilleure approche à ce sujet?
** Puis-je utiliser le motif d'usine pour créer tous ces ** Bien sûr que vous pouvez. La question est de savoir si cela va être utile. Et pour cela, nous aurions besoin de demander à notre boule de cristal, parce que vous avez fourni le contexte zéro. – Euphoric
Je ne comprends pas trop bien. Vous avez un 'ArticleFactory' mais vous renvoyez les types' Validator', 'Cleaner' et' Storage'. Sont ces dérivés ou dépendances de 'Article'? –
J'ai mis à jour ma réponse. Faites-moi savoir si vous voulez quelque chose de plus. Merci –