активная запись против голого sql - PullRequest
2 голосов
/ 12 февраля 2011

Я горжусь тем, что не принимаю концепции, если нет веской причины. Но я сомневаюсь в использовании активной схемы записи. В настоящее время я использую Zend, но, скажем, код Igniter имеет активную запись.

Я не пользуюсь. Потому что

sql - это sql, он имеет собственный синтаксис. Вы можете скопировать в редактор SQL и он работает (если он работает!) вы не изучаете другой синтаксис вам не нужно убивать ваш скрипт, чтобы собрать, если активная запись пишет sql так, как вы ожидали

но активная запись имеет

вы притворяетесь, что пишете как объективный php. Когда вам нужно переместить другую базу данных (oracle> mysql: p), вам не нужно менять rand функцию на random, активная запись может сделать это для вас.

имеет ли активная запись гораздо больше возможностей, которые мне не хватает? Можете ли вы привести несколько примеров, когда активная запись может быть спасением?

1 Ответ

2 голосов
/ 12 февраля 2011

ActiveRecord - это

Объект, который упаковывает строку в таблицу или представление базы данных, инкапсулирует доступ к базе данных и добавляет логику домена к этим данным.

Это , а не , которое использует CodeIgniter.AR CI является базовым объектом запроса .

Основным преимуществом ActiveRecord является его простота.Если ваше приложение в основном выполняет простые операции CRUD и ваша структура таблиц очень близко соответствует ActiveRecord, то это хороший выбор.В этом случае легко абстрагировать CRUD.И вы все равно можете добавить в него SQL, созданный вручную, для некоторых более сложных манипуляций со строками.

class User
{
    protected static $dbAdapter;
    protected $username;
    …

    public static function findById($id)
    {
        $result = self::$dbAdapter->query(
            sprintf('SELECT * FROM users WHERE id = %d', $id)
        );
        if($result) {
            return new User($result);
        }
    }

    public function create()
    {
        try {
            return self::$dbAdapter->query(
                sprintf(
                    'INSERT into users …', 
                    $this->username, 
                    …
                );
            );
        } catch …
    }

    …
}

Вы можете использовать это в своем приложении следующим образом:

$john = User::findById(123);
echo $user->username; // John

$jane = new User(array(
    'username' => 'Jane'
));
$jane->create();

Вы определенно нехотите использовать ActiveRecord, если ваши строки и AR не совпадают.AR является объектом, представляющим строку базы данных.AR связывает дизайн объекта с дизайном базы данных.AR не является ORM.Попытка поместить это в это не практично.Если вы обнаружите, что вам нужны более сочные доменные модели, вы не будете довольны этим, потому что это в конечном итоге будет препятствовать вашему развитию из-за несовпадения объектно-реляционного импеданса.1024 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...