Uso superglobale della sessione astratta / incapsulante all'interno della classe di accesso comune

3

Sono in procinto di rimuovere le dipendenze dirette da un progetto esistente. Sono giunto ora a rimuovere l'uso diretto di $_SESSION all'interno degli script. Questo serve a rendere gli stessi script disponibili per un ambiente diverso da un server web come la CLI di PHP.

Il codice base su cui sto lavorando consiste principalmente di classi, quindi ho pensato di creare un'interfaccia generica che dichiari metodi comuni come fetch($key) , exists($key) , delete($key) e così via. Qualsiasi classe che richiede l'accesso alla sessione implementerebbe quindi questa interfaccia, rendendo così i test più facili (il che è quasi impossibile al momento).

Quindi le domande sono:

  1. Pensate che questo sia un buon approccio
  2. Ci sono altri modi per ottenere la stessa astrazione

Sono aperto a suggerimenti di ogni tipo, anche perché sto usando questa opportunità di apprendimento. Se mi colleghi a una biblioteca, preferirei scrivere qualche parola sul motivo per cui l'hai scelto.

    
posta AnotherGuy 01.08.2015 - 18:45
fonte

1 risposta

1

È piuttosto comune nei grandi framework MVC vedere la sessione superglobal racchiusa in un oggetto e l'idea di poter inserire qualcos'altro al suo posto in un contesto CLI è buona.

Prova a cercare componenti anche di altre persone già costruite. Il componente Symfony HttpFoundation e Zend Diactoros potrebbero essere di interesse, se stai usando $ _SESSION superglobal per elaborare i dettagli della richiesta HTTP.

Modifica

Nel caso in cui non fosse chiaro da quanto sopra, suggerivo di avere una singola classe che gestisse l'interazione con la sessione; Penso che un approccio compositivo come questo porterebbe a un'architettura più pulita rispetto all'utilizzo dell'eredità proposta dal titolo della tua domanda. Dipende in qualche modo dallo specifico del tuo codice, ma penso che questo approccio combinato con l'uso di oggetti mock nei test unitari probabilmente migliorerà il problema di testabilità che hai identificato con l'accesso in linea allo stato globale.

    
risposta data 01.08.2015 - 20:55
fonte

Leggi altre domande sui tag