Controller:
function indexAction()
{
if ($condition)
$this->renumPosition($id); //LINE #1
}
//Redirect only - function's sole purpose is to call another function
function renumPosition($id)
{
$this->repository->renumPosition($id);
}
Repository:
function renumPosition($id)
{
//SQL, DQL, ORM code follows
...
}
Domanda
Se la riga n. 1 (sopra) deve essere
$this->repository->renumPosition($id);
e dovresti rimuovere renumPosition
dal controller?
La domanda è ... quando rinvio dell'esecuzione direttamente al mio modello / livello repository, e quando chiamo una funzione di un controller che rimanda al livello modello / repository?
Questa è forse una domanda davvero sottile. Solo per notare, il mio intento qui NON è quello di salvare una chiamata di funzione in più, ma di allinearmi con una filosofia di programmazione.
Ad esempio, posso argomentare che quando Controller deve essere consapevole di un'azione, dovrei avere un pubblico method
in Controller che può effettuare una chiamata a repository
. Ma poi, quando è un'azione interna , forse posso richiamare il repository direttamente senza effettuare una chiamata al metodo separata in Controller.
Ha senso?
Qual è il mio obiettivo / preoccupazione
Ecco il codice legacy che ho iniziato con:
Controller:
function indexAction()
{
if ($condition)
$this->renumPosition($id); //LINE #1
}
function renumPosition($id)
{
//Heavy SQL, DQL, ORM code follows - say 50-70 lines
...
$db->db_function($sql)
...
$db->db_function($moreSql)
//some more code here that relates to DB transactions
$db->db_function($moreSql)
}
Poiché il codice precedente era principalmente correlato allo storage, ho spostato tutto nella mia classe Repository
. Ho finito con questo nel mio Controller
:
function renumPosition($id)
{
$this->repository->renumPosition($id);
}
Ho esaminato quanto sopra e ho detto a me stesso - perché ho una funzione nel mio Controller che ha il solo scopo di chiamare un'altra funzione? Perché questa indiretta? Perché il codice ingombra il mio spazio cognitivo e lo schermo quando posso eliminarlo del tutto e completamente. E così ho fatto. Ho chiamato la funzione repository
direttamente e ho rimosso completamente la funzione di "reindirizzamento" del controller. Ma poi mi sono chiesto: ho fatto la cosa giusta? Questo è quello che sto cercando di capire con la mia domanda.