Как обрабатывать создание доменного объекта & quot; внутри & quot; коллекции

Я новичок в структуре MVCish, так что будьте осторожны со мной, пожалуйста. Я пишу свою собственную маленькую MVCish-структуру для понимания целей. Постепенно я намереваюсь понять, как все сходится правильно.

Сильно полагаясь на Как модель должна быть структурирована в MVC? Терешко и тот факт, что Domain Object != Domain Object CollectionЯ пытаюсь найти способ обрабатывать создание доменных объектов в пакетном режиме и их соответствующей вставки в коллекцию.

О своем примере, он передает один экземпляр ServiceFactory как контроллеру, так и представлению. В этом экземпляре MapperFactory и DomainObjectFactory вставлены в его конструктор. Там нет Коллекционная фабрика.

$serviceFactory = new ServiceFactory(
new DataMapperFactory($dbhProvider),
new DomainObjectFactory
);

/*
* Initialization of View
*/
$class = '\\Application\\View\\' . $request->getResourceName();
$view = new $class($serviceFactory);
$view->setDefaultTemplateLocation(__DIR__ . '/templates');

/*
* Initialization of Controller
*/
$class = '\\Application\\Controller\\' . $request->getResourceName();
$controller = new $class($serviceFactory, $view);

ServiceFactory.php будет что-то вроде

class ServiceFactory
{
private $domObjFactory;
private $mapperFactory;

private $services = array();

public function __construct(MapperFactory $mapperFactory, DomObjFactory $domObjFactory)
{
$this->mapperFactory = $mapperFactory;
$this->domObjFactory = $domObjFactory;
}

public function create($name)
{
if ( array_key_exists($name, $this->services) === false )
{
$serviceName = '\Vendor\\'.$name.'Service';

$this->services[$name] = new $serviceName($this->mapperFactory, $this->domObjFactory);
}

return $this->services[$name];
}
}

В качестве примера, скажем, у меня есть доменный объект с именем Contract и я хочу, чтобы мое мнение показало их всех в списке. Вероятно, следует сказать «модель» что-то вроде $ContractService->fetchAll()Это создаст экземпляр коллекции и скажет мапперу заполнить ее всеми контрактами. Правильно?

Учитывая, что коллекция должна содержать доменные объекты и такой метод, как $ContractMapper->fetchAll($collection) наверное стоит создать кучу из них, как справиться с их созданием !?

  • Должен ли я иметь специальную коллекционную фабрику?
  • Должен ли я создавать отдельные доменные объекты с методом внутри объекта коллекции?
  • Должен ли я создавать отдельные доменные объекты с методом внутри Collection Mapper?
  • Если так, я должен внедрить Фабрику Объектов Домена в одном из них? (Это может потребовать ServiceFactory с большим количеством зависимостей Factory, которые вводятся, что плохо, верно?)

Я считаю, что это может быть легко достигнуто плохо закодированным способом, но я пытаюсь найти самое элегантное и чистое решение.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]