Come faccio a evitare che le mie lezioni in MVC diventino gonfie?

0

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.

    
posta johnny 01.09.2014 - 16:32
fonte

1 risposta

2

La tua domanda è un po 'confusa, ma da quello che ho capito, devi rifattorizzare il codice e trovare il tempo per estinguere il debito tecnico.

someone wants student information, and I query Students and Classes in my Student class, if I put it in Classes, I cross over to the Students, [edit] violating single responsibility.

Scrivere codice è solo una parte più facile dello sviluppo del software. Devi pensare a chi è la responsabilità (di Classes o Student ), e implementarla. Di nuovo, se rompi qualcosa (come questo principio OO), prova a trovare il tempo e risolvilo.

I then copy and paste and change one thing or add an if then or a switch, this gets multiplied across the class in my model layer in multiple objects, giant switch statements, etc. That does not seem to be what Model layers should be composed of, giant Models with code everywhere, violating DRY.

Approccio pessimo. La soluzione è di nuovo refactoring. Non lasciare che il codice copiato rimanga lì. Torna indietro e implementalo correttamente.

How do I keep my classes in MVC from becoming bloated?

Di nuovo, refactoring. E il design adeguato. Ma i requisiti di modifica non riguardano solo il codice. Refactoring significa anche risolvere problemi di progettazione e architettura.

Se una classe si sta gonfiando, questo di solito significa che il design è cattivo o non è stato adattato alle modifiche.

    
risposta data 01.09.2014 - 17:01
fonte

Leggi altre domande sui tag