<rmcreative>

RSS

Все заметки с тегом «толстые модели»

Можно уточнить:

  1. Тонкие и толстые модели

    4 апреля 2011

    1. Толстые модели можно охватить модульными тестами. С тонкими придётся писать ещё и функциональные.
    2. Реализацию метода толстой модели легко подменить. Для меня это основной аргумент (хотя часто и я ленюсь). Например, есть у нас модели в системе, использующие Active Record:
    class MyThinModel extends CActiveRecord
    {}

    В большинстве случаев вызывают их в контроллерах как-то так:

    $criteria = new CDbCriteria();
    $criteria->compare('used', 1);
    $models = MyThinModel::model()->findAll($criteria);

    А теперь представим, что проект у нас вырос до приличных нагрузок и кэш с оптимизацией запросов не помогают. Что теперь делать? Приходится перекраивать хранилище на какой-нибудь быстрый key-value, например, тот же Redis. Вот только проблема есть… проект очень завязан на SQL-ный Active Record и программист, посмотрев на всё это дело, принимает популярное решение «переделать с нуля». А ведь можно было этого избежать (ну или хотя-бы сгладить эффект), если бы изначально использовались толстые модели:

    class MyThinModel extends CActiveRecord
    {
        public function getAllUsed()
        {
            $criteria = new CDbCriteria();
            $criteria->compare('used', 1);
            return self::model()->findAll($criteria);
        }
    }

    Ну и в контроллере:

    $models = MyThinModel::model()->getAllUsed();

    В этом случае переписать необходимо будет только getAllUsed.

    30 комментариев