Я возился с инфраструктурой MVC, и я наткнулся на проблему, я не уверен, как ее решить.
Я хочу создать DomainObjectFactory
для слоя Model моего приложения, однако каждый объект Domain будет иметь другой набор аргументов, например:
И так далее. Как я могу легко сказать своей фабрике, какие объекты мне нужны?
Я придумал несколько вариантов:
DomainObjectFactory
интерфейсом и создайте конкретные классы – Проблемный, потому что это очень много заводов! Есть ли полезная схема соизволения, которую я могу использовать здесь? Или какое-то другое умное решение?
Почему вы хотите инициализировать объект домена со всеми назначенными свойствами?
Вместо этого просто создайте пустой объект домена . Вы можете на заводской проверке, если у него есть метод prepare()
для выполнения. Ох .. и если вы используете DAO , вместо прямого взаимодействия с Mappers , вы можете захотеть построить и ввести соответствующий DAO в свой объект домена .
Назначение значений должно происходить только в Сервисе . С помощью обычных сеттеров.
Получение существующей статьи
public function retrieveArticle( $id ) { $mapper = $this->mapperFactory->create('Article'); $article = $this->domainFactory->create('Article'); $article->setId( $id ); $mapper->fetch( $article ); $this->currentArticle = $article; }
Новый комментарий
public function addComment( $id, $content ) { $mapper = $this->mapperFactory->create('article'); $article = $this->domainFactory->create('Article'); $comment = $this->domainFactory->create('Comment'); $comment->setContent( $content ); $comment->setAuthor( /* user object that you retrieved from Recognition service */ ); $article->setId( $id ); $article->addComment( $comment ); // or you might retrieve the ID of currently view article // and assign it .. depends how you build it all $mapper->store( $article ); // or }
Передача пользовательского ввода
public function getArticle( $request ) { $library = $this->serviceFactory->build('Library'); $library->retrieveArticle( $request->getParameter('articleId')); }