Non sono sicuro di come avrei dovuto formulare la domanda.
Se ho un database Studente e Classi e ho domande che riguardano entrambi. Dove inserisco le mie domande? In un caso, qualcuno vuole informazioni sugli studenti, e chiedo Studenti e Classi nella mia classe Student, se lo metto in Classi, passo agli Studenti, [modifica] violando una singola responsabilità.
Ho pensato che dovrei avere solo query per Studenti e query per Classi in ogni classe di questa parte del livello Modello, ciascuna utilizzata dai servizi.
Inoltre, cosa faccio quando ho bisogno di nuove query? Ho questo insieme di domande, poi qualcuno arriva e vuole qualche domanda speciale. Poi copio e incollo e cambio una cosa o aggiungo un if se o un interruttore, questo viene moltiplicato per tutta la classe nel mio modello layer in più oggetti, istruzioni switch giganti, ecc. Ciò non sembra essere ciò di cui dovrebbero essere composti gli strati Modello, modelli giganti con codice ovunque, che violano DRY.
Ho un servizio in un oggetto in Studenti, findAllClassesByStudent($student_id)
chiamo nella mia vista, forse, e un altro in Classi, findAllStudentsInAParticularClass($class_id)
. Sono molto vicini.
Mi rendo conto che posso astrarre altri livelli e isolare la logica in qualche altro livello, ma non posso astrarre per sempre, prima o poi avrò quella che appare come una violazione dell'encapsulation di OOP. ViewModel View, Abstract Data Access Layer, i servizi, ecc. E così via. Se faccio troppo poco, i miei oggetti sono anemici.
Ho letto molto e anche se ci sono molte interpretazioni, presumo di lasciare tutta la logica di business nel livello Model, non sul controller o sulla View.
Pseudo esempi:
class Student extends Model {
private $student
public function __construct() {
}
public function getStudentByID($student_id){
...SQL
}
public function getStudentClasses($student_id){ //first time
}
}
class Classes extends Model {
public function __construct(){
}
public function findAllStudentsInAParticularClass($class_id){ //feels like bloat
...SQL
}
}
Questa mi sembra una duplicazione. Forse non ci ho pensato abbastanza. So solo per esperienza che c'è sempre qualcuno che vuole una domanda leggermente diversa e io finisco per copiare e incollare.