Схема расчета популяции двунаправленных данных

Я ищу для реализации эта стратегия для использования классов данных Symfony Form более формальным, общим способом.

tl; dr: Основная идея состоит в том, чтобы собрать данные формы в плоский толерантный объект, а затем выполнить проверку. В случае проверки заполните данные формы в более строгую иерархическую структуру объекта ORM. При изменении существующих данных сначала инициализируйте данные формы из данных ORM.

В своей самой упрощенной, неподдерживаемой, ковариантной форме это выглядит примерно так:

abstract class FormDataInterface
{
protected $entity;

public function __construct(EntityInterface $entity)
{
$this->entity = $entity;
}

abstract public static function initialize(EntityInterface $entity): self;
abstract public function populate(): void;
}

/**
* Each concrete child is a two-way adaptor responsible for defining its own
* data members and rules for populating initial form data and repopulating the
* data back into the entity.  (In practice, this is very unique and sometimes
* complicated)
*/
class UserData extends FormDataInterface
{
private $name;

public function __construct(UserEntity $user)
{
parent::__construct($user);
}

// accessors for private members

public static function initialize(UserEntity $user): self
{
$userData = new self($user);
$userData->setName($user->getName());
return $userData;
}

public function populate(): void
{
$this->entity->setName($this->name);
}
}

Проблема заключается в специализации EntityInterface для конкретной конкретной сущности. Правила системы указывают, что каждый конкретный класс данных формы будет связан с определенной сущностью. Также я хочу иметь возможность определять методы initialize () и populate () как-то в договоре.

Я прочитал Эта проблема. И паттерн стратегии, и паттерн моста кажутся жизнеспособными, но я не совсем понимаю, как решить проблему ковариации.

0

Решение

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

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

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