Benvenuti

Come creare un buon Model in Codeigniter

Come creare un buon Model in Codeigniter
Scritto da Martedì 8 Maggio 2012 in Articoli CodeIgniter
Letto 5,851 volte

 

Sviluppare con un framework MVC garantisce senza dubbio una maggiore riutilizzabilità e la robustezza del codice. In questo articolo ci soffermeremo sulla scrittura della parte model del paradigma MVC impiegando CodeIgniter. Questo modello non è specifico di CodeIgniter, ma una parte del codice lo sarà.

Modello CRUD

CRUD è un acronimo che sta per Create, Retrieve, Update e Delete. Questi sono i tipi più elementari di interazione che un codice può avere con una sorgente dati.
Alcuni esempi:

  • Create: Aggiunta di un account utente al tuo sito web
  • Retrieve: ottenere un elenco dei prodotti disponibili Aggiornamento
  • Update: della password di un utente o il nome di un prodotto
  • Delete: la rimozione di un account utente o di un prodotto

Quando si scrive un model in genere si inizia con la creazione di metodi CRUD per ognuno dei tipi logici di dati. Se ad esempio dovessimo scrive l’autenticazione dell’utente (login, logout, password dimenticata, attivazione degli account) sarà necessario un metodo per aggiungere, aggiornare e cancellare gli utenti e la possibilità di estrapolare le informazioni relative all’account per un singolo utente o per un gruppo di utenti.

Ad Esempio:

La maggior parte delle interazioni che abbiamo con gli account utente possono essere gestiti da questi quattro metodi. Invece di creare un model “GetActiveUsers” ci basta creare un parametro in GetUsers che determina lo stato di utente come risposta, di seguito vedremo meglio la cosa.

Array di parametri

Tipicamente parametri per i metodi vengono inviati nel modo seguente:

Naturalmente, (soprattutto per GetUsers) ci saranno sempre più parametri da aggiungere ai nostri metodi. Questo non solo rende molto difficile la lettura, ma può creare problemi nel caso in cui dovessimo tornare indietro e modificare il codice già scrittoo se dobbiamo variare un parametro sul metodo.
Per esempio:

Potremmo poi aver bisogno anche di una GetUser($userId) singolare, oltre al metodo GetUsers. Questo è un problema perché stiamo creando più versioni dello stesso metodo. Se cambiamo il modo in cui vogliamo informazioni da restituire poi avremmo bisogno di modificare il codice in due punti, i metodi GetUser e GetUsers.

Per superare questi problemi è consigliabile l’utilizzo di un array opzioni, in questo modo:

Se prima era necessario usare GetUsers(5, 5, ‘active’) per avere la lista degli utentim adesso è possibile usare GetUsers(array(‘limit’ => 5, ‘offset’ => 5, ‘status’ => ‘active’);

I parametri passati in un array possono essere inviati in qualsiasi ordine o possono anche essere completamente omessi. Questo permette di aggiungere e rimuovere parametri senza aggiornare le parti di codice che fanno uso di questo metodo.

 

Utility

Al fine di creare metodi adeguatamente robusti abbiamo bisogno di implementare alcune piccole fuznionalità comuni. Vale a dire, la capacità di stabilire quali sono i campi richiesti e quali valori hanno di default. Ad esempio, un campo richiesto quando si aggiunge un utente potrebbe essere la mail. Per questo creiamo il metodo ‘required’.

Questa utility nel nostro ‘AddUser’ potrebbe essere utilizzato così:

Adesso il metodo ‘AddUser’ restituirà false se il campo ‘userEmail’ non è stato inviato con la matrice dei parametri.

Nel blocco PHPDoc abbiamo stabilito che lo stato di default per i nuovi utenti è ‘attivo’. Naturalmente, se volessimo creare un utente inattivo dovremmo essere in grado di passare il parametro ‘stato_utente’ con il valore inattivo. Tuttavia, siamo non ne abbiamo voglia 🙂 e preferiamo non dover dichiarare esplicitamente ‘attivo’.

Il metodo di ‘default’:

Fatto, questo metodo consiste di un singolo comando. La creazine di un nuovo metodo può essere utile per aggiungere funzionalità extra senza dover poi cambiare ogni singolo metodo che ne prevede l’uso.

Torniamo a noi ed implementiamo il metodo ‘default’ in ‘AddUser’:

A questo punto sappiamo che il campo ‘userEmail’ esiste nell’array $option e se nessun campo ‘userStatus’ è stato definito tra i parametri di chiamata del metodo, ne verrà creato uno con valore ‘.

Questi metodi rendono il codice più robusto, ed hanno come scotto solo l’aggiunta di poche righe per ciascun metodo.

Gestione Record

Molti database (MySQL, Oracle, Microsoft SQL, PostgreSQL, ecc) utilizzano differenti costrutti SQL. Proprie variazioni della sintassi SQL ‘ufficiale’ e tutti lavorano un po diversamente gli uni dagli altri. CodeIgniter ci mette a disposizione delle librerie che astraggono questo problema. Questo ci permette in altre parole, eseguire query su qualsiasi database supportato dalla nostra libreria.

Un’esempio di come potremmo integrare il gestore del DB di codeIgniter nel nostro esempio:

Questo è un’esempio di come possiamo usare questi metodi per interagire con il nostro database.

Aggiungere un utente

Aggiornare il suo profilo

Autenticare l’utente

Recuperare l’elenco degli utenti

Cancellare un’utente

Naturalmente CodeIgniter permette l’accesso a più database contemporaneamente anche di diversa natura, garantendo sempre quell’astrazione che permette l’esecuzione delle query in questo semplice modo.

 

This Post Has 2 Comments

  1. Alex says:
     

    Ciao, ottimo tutorial!

    Volevo segnalarti che nel codice che proponi sono saltati tutti i caratteri “>”, che sono stati trasformati nel relativo codice “>”. Questo rende difficile la lettura del codice, soprattutto per chi è alle prime armi.

    • Giuseppe Quaranta says:
       

      Ciao Alex,
      grazie mille per il complimento e per la segnalazione.
      Ho aggiornato il plugin di visualizzazione che ha resettato alcuni parametri di configurazione.

      Ora è ok.

      Ciao,
      Giuseppe

Leave A Reply