Ragazzo
TDD interested
Существует следующая проблема, есть обычная модель для обработки формы от пользователя, но поскольку в форме используется еще и табличный ввод(читай массив экземпляров другой модели) и данные должны сохраняться в разные места(БД, и другое), то возник вопрос как правильней организовать это, дело в том что в контроллере проверить валидацию табличного ввода не составляет проблем, но эта модель является частью главной модели. поясню на простом примере
Соответственно при вызове метода save() основной модели, она будет вызывать метод save() либо CDbSaveModel либо CAnotherSaveModel, но поскольку кроме сохранения будет еще куча методов взаимодействия и получения данных, то есть поле $strategyField, соответственно все взаимодействие и будет заключаться в делегировании этому объекту, хотел сделать это на подобии паттерна Стратегия, но получается что выбор сценария у меня будет происходить в самом контексте( __construct() основной модели), а не вне его, это не очень мне нравится. возможно у кого то есть какие-то предложения?И не слишком ли это не "тру" когда вторая модель у меня отвечает по сути только за валидацию, т.к все данные будут через основную модель, делегироваться методам другим?
Основная идея, сохранить модели обработки форм ввода, не завязывая их на конкретное хранилище данных, т.к оно может легко подменяться Возможно что-то плохо объяснил, задавайте вопросы, отвечу
PHP:
//основная модель, здесь происходит сохранение всех данных, включая данные модели для табличного ввода
class CMainModel extends CFormModel
{
$someField1;
$someField2;
$someField3;
//поле для инстацирования конкретного экземпляра CDbSaveModel либо CAnotherSaveModel
$strategyField;
public function __construct()
{
$this->strategyField = (condition) ? new CDbSaveModel() : new CAnotherSaveModel();
}
public function save()
{
$this->strategyField->save($MainAndSecondModelFields)
}
public function validate()
{
//validate data
}
public function getSmth()
{
$this->strategyField->getSmth()
}
public function getSmth2()
{
$this->strategyField->getSmth2()
}
}
//модель для обработки табличного ввода, создается по экземпляру на каждый элемент
//табличного ввода
class CSecondModel extends CFormModel
{
$someField1;
$someField2;
$someField3;
public function save()
{
//do smth here
}
public function validate()
{
//validate data
}
}
class CDbSaveModel extends CActiveRecord
{
public function save()
{
//do smth here
}
}
class CAnotherSaveModel
{
public function save()
{
//do smth here
}
}
Основная идея, сохранить модели обработки форм ввода, не завязывая их на конкретное хранилище данных, т.к оно может легко подменяться Возможно что-то плохо объяснил, задавайте вопросы, отвечу