Связанные модели (MVC)

Ragazzo

TDD interested
Существует следующая проблема, есть обычная модель для обработки формы от пользователя, но поскольку в форме используется еще и табличный ввод(читай массив экземпляров другой модели) и данные должны сохраняться в разные места(БД, и другое), то возник вопрос как правильней организовать это, дело в том что в контроллере проверить валидацию табличного ввода не составляет проблем, но эта модель является частью главной модели. поясню на простом примере
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
    }
}
Соответственно при вызове метода save() основной модели, она будет вызывать метод save() либо CDbSaveModel либо CAnotherSaveModel, но поскольку кроме сохранения будет еще куча методов взаимодействия и получения данных, то есть поле $strategyField, соответственно все взаимодействие и будет заключаться в делегировании этому объекту, хотел сделать это на подобии паттерна Стратегия, но получается что выбор сценария у меня будет происходить в самом контексте( __construct() основной модели), а не вне его, это не очень мне нравится. возможно у кого то есть какие-то предложения?И не слишком ли это не "тру" когда вторая модель у меня отвечает по сути только за валидацию, т.к все данные будут через основную модель, делегироваться методам другим?
Основная идея, сохранить модели обработки форм ввода, не завязывая их на конкретное хранилище данных, т.к оно может легко подменяться Возможно что-то плохо объяснил, задавайте вопросы, отвечу
 

Вурдалак

Продвинутый новичок
модель для обработки формы от пользователя
Что это за терминология? Т.е. такое ощущение, что под «моделью» в рамках одного поста понимаются разные вещи: в заголовке висит «MVC», а тут вроде ничего похожего.
 

Ragazzo

TDD interested
Вурдалак
Ну немного некорректно выразился, имелось ввиду что данная модель будет отвечать только за прием данных от пользователей и их валидацию, изначально вопрос рассматривался в контексте фреймворка Yii, в нем это CFormModel, а не CActiveRecord модель, т.е данная модель не завязана на БД (не хотел просто заострять внимание на фреймворке)
upd подправил код первого поста
 

fixxxer

К.О.
Партнер клуба
Что-то у меня складывается впечатление, что в аббревиатуре MVC каждый по своему понимает как ее значение в общем, так и значение каждой буковки в отдельности.

Как это FormModel? :confused: Что оно делает?
 

Ragazzo

TDD interested
Что-то у меня складывается впечатление, что в аббревиатуре MVC каждый по своему понимает как ее значение в общем, так и значение каждой буковки в отдельности.

Как это FormModel? :confused: Что оно делает?
Ладно, видимо топик можно закрывать. Я уточнил, что это Yii, к сожалению кто не работал с ним, видимо не поймет. Ну похоже понимание MVC у разработчиков Yii плохое согласно твоему посту :D
 
Сверху