Adapter son code pour la 2.24 n° 25

Un truc qui m’a souvent agacé dans Dotclear est la gestion des enregistrements, représentés soit par un record, soit par un staticRecord soit même par un extStaticRecord sans que je ne sache vraiment jamais lequel était pertinent.

Alors j’ai décidé de créer une interface unique pour tout ces objets, interface qui se nomme dcRecord1.

Cette interface s’instancie à partir d’un record ou d’un staticRecord, peu importe, et apporte toutes les méthodes déjà possibles avec ces deux objets, y compris l’extension vers un extStaticRecord.

Notez que si vous utilisez déjà l’utilitaire dcSqlStatement et ses dérivés (voir le fichier inc/core/class.dc.sql.statement.php) alors ça sera fait automatiquement au moment de l’exécution des requêtes. Exemple avec la méthode select() :

public function select(): ?dcRecord
{
    if ($this->con && ($sql = $this->statement())) {
        return new dcRecord($this->con->select($sql));
    }

    return null;
}

Sinon cette nouvelle interface s’utilise classiquement :

Avant :

// Get logs from this task
$rs = dcCore::app()->con->select(
    'SELECT log_id ' .
    'FROM ' . dcCore::app()->prefix . dcLog::LOG_TABLE_NAME . ' ' .
    "WHERE log_msg = '" . dcCore::app()->con->escape($id) . "' " .
    "AND log_table = 'maintenance' "
);

Après :

// Get logs from this task
$rs = new dcRecord(dcCore::app()->con->select(
    'SELECT log_id ' .
    'FROM ' . dcCore::app()->prefix . dcLog::LOG_TABLE_NAME . ' ' .
    "WHERE log_msg = '" . dcCore::app()->con->escape($id) . "' " .
    "AND log_table = 'maintenance' "
));

Ou encore (création à partir d’un tableau de valeurs) :

return staticRecord::newFromArray($items);

Qui devient :

return dcRecord::newFromArray($items);

Je ne vais pas détailler plus cette évolution, alors s’il reste des zones d’ombre, n’hésitez pas à me questionner dans les commentaires de ce billet.

Par ailleurs l’interface SQLite ayant évolué depuis quelques années, l’usage d’un staticRecord avec ce driver n’est plus requis et la classe dcRecord permettra son évolution sans casser le code qui l’utilise.


Notez que vous pouvez ne toucher à rien pour l’instant, les anciennes structures sont toujours valides, mais ça simplifie largement le code et le typage de celui-ci donc n’hésitez-pas à sauter le pas :-)


  1. Je l’avais d’ailleurs déjà évoqué dans ce billet↩︎

Ajouter un commentaire

Les champs suivis d'un * sont obligatoires

Les commentaires peuvent être formatés en utilisant la syntaxe Markdown Extra.

Ajouter un rétrolien

URL de rétrolien : https://open-time.net/trackback/15528

Haut de page