PHP OOP, strutturando correttamente i miei oggetti

3

Ho un'architettura simile a questa:

User (Name, Email, ID...)
---- Studios (Name, Location, Description...)
---------- Videos (Title, Description, URL, Length, Views...)

In poche parole, un utente può avere da 1 a più studi e uno studio può avere da 1 a più video.

Ognuna di queste sono Classi nella mia applicazione PHP (Utente, Studio e Video) che memorizza le informazioni (Nome utente, ID utente, Nome studio, Posizione Studio, Nome video, URL video, Visualizzazioni video ...)

In questo momento, se voglio mostrare, ad esempio, la quantità totale di video e amp; osserva che un utente ha preso in considerazione tutti i suoi contenuti, ho costruito tutti i suoi studi dalla classe utente (con una funzione come "build_Studios", quindi per ogni studio ho creato tutti i video della classe Studio (con una funzione come " build_Videos".

Questo mi consente di accedere facilmente a tutti i dati di cui ho bisogno piuttosto facilmente, tuttavia ora che sto guardando la lunghezza dei nostri dati, sono un po 'scettico su questo approccio. Ad esempio, un utente può facilmente aver postato nel raggio di migliaia di media distribuiti nei suoi studi. Inoltre, sto pensando alla funzione Pagination che sembra avere molto più senso usare LIMIT invece di analizzare un array ...

Quindi vorrei sapere se dovrei rivedere la mia architettura mentre il progetto è ancora in una fase iniziale. In tal caso, come consiglieresti di organizzare i miei dati? Altrimenti, è una struttura come quella che ho citato in precedenza appropriata per un'applicazione di grandi dimensioni?

    
posta Estarius 01.03.2016 - 02:56
fonte

1 risposta

2

Una frase nella tua domanda solleva un'enorme bandiera rossa per me ... Sto parlando di dove dici "Questo mi permette di accedere facilmente a tutti i dati di cui ho bisogno piuttosto facilmente ..."

In un sistema progettato correttamente, nulla al di fuori della classe User dovrà "accedere" a nessuno dei suoi oggetti Studios e nulla al di fuori della classe Studios dovrà accedere agli oggetti Video degli Studios.

Se applichi le restrizioni di cui sopra, non importa se carichi tutti gli Studios / Video in una volta o li streaming in un po 'alla volta, perché la modifica del sistema da un metodo all'altro richiederà solo la modifica di uno classe.

Per citare Arthur J Riel di "Euristica del design orientato agli oggetti" ... "Di tanto in tanto, uno sviluppatore discuterà, 'Ho bisogno di rendere pubblico questo dato perché ...' In questo caso, il lo sviluppatore dovrebbe chiedersi: "Che cosa sto cercando di fare con i dati e perché la classe non esegue questa operazione per me?" In tutti i casi, alla classe manca semplicemente un'operazione necessaria. "

- EDIT -

Per guidare questo punto a casa. Immagina di avere una classe Rectangle che contiene due punti topLeft e bottomRight . Uno degli invarianti della classe è che topLeft.x deve sempre essere inferiore a bottomRight.x . Supponiamo che crei i getter tutt'intorno.

Che cosa deve fare un rettangolo scadente quando qualcuno fa questo?

myRectangle.topLeft.x = myRectangle.bottomRight.x + 12

La risposta è che non c'è nulla che la classe Rectangle possa fare. La sua invarianza è rotta e non ha alcuna possibilità di proteggersi.

    
risposta data 01.03.2016 - 03:27
fonte

Leggi altre domande sui tag