Как обрабатывать создание доменных объектов "внутри" коллекции

Я новичок в структуре 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, которые вводятся, что плохо, верно?)

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

0 ответов

Другие вопросы по тегам