Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Italy
    Messaggi
    139

    Scelta classi PHP Object Oriented

    Buongiorno a tutti,

    sto realizzando il mio primo sito utilizzando PHP Object Oriented come da titolo.
    Il sito si appoggia ad un database, e contiene delle notizie, di vario genere quindi vengono mostrate in base all'idN ovvero filtrate in base all'identificativo della notizia.
    Le notizie sono di 3 tipi: Recensioni idN=1, Guide idN=2, Itinerari idN=3.
    Adesso ho pensato di creare le seguenti classi:
    //classi gestione database:
    - Database (classe astratta)
    - ModificaDatabase (classe che implementa i metodi di Database ed altri metodi propri)

    //classe per gestire gli aspetti degli elementi da inserire nell'header della pagina
    - Intestazione (classe con i metodi per mostrare la barra di navigazione dinamica, il logo del sito ecc)

    //classe per gestire la visualizzazione delle notizie
    -Notizia (metodi per visualizzare le notizie)-> vorrei poi creare classi specifiche che ereditano da Notizia.

    Ora mi chiedo se siano corrette per ciò di cui ho bisogno, e come poterle relazionare tra loro.

    Grazie a tutti.

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Io per attenermi ad un modello MVC farei così:


    Model
    Una classe per ogni elemento che inserisci nel db, che estendono una classe base, chiamiamola Model


    Model - Classe base con metodi e proprietà comuni
    Recensione - che estende model ma ha metodi/proprietà specifici
    Guida - che estende model ma ha metodi/proprietà specifici
    Itinerario - che estende model ma ha metodi/proprietà specifici

    Puoi anche valutare di usare un ORM per semplificarti la vita.

    View
    Usa un template manager tipo blade o twig per gestire le view.
    Potrai creare blocchi riutilizzabili (tipo header e footer), e contenuti specifici per ogni url.
    Poi userai i dati presi dal db per popolare le varie view in maniera dinamica.


    Controller
    Classi che gesticono le operazioni tra model e view.
    In genere si crea un controller per ogni gruppo di operazioni, ma diciamo che ognuno ha le sue idee.
    Quanti e quali saranno i controller dipende un po' dalle operazioni che vuoi fare.
    Potresti avere per esempio:
    Controller per la gestione degli utenti (se il sito prevede di avere utenti loggati)
    Controller per l'area admin (se c'è un'area admin)
    Controller per visualizzare le notizie
    etc.


    Inoltre nei moderni framework vengono usati dei cosiddetti Service
    I service vengono utilizzati all'interno dei controller per appunto fornire servizi come accesso al database, routing, logging, invio email etc.
    Questi solitamente vengono iniettati tramite il costruttore del controller tramite il design pattern chiamato dependency injection. Creandoli separatamente, e non dentro ai controller, si introduce un ulteriore livello di astrazione che ne semplifica l'aggiornamento/modifica.


    In alternativa, per capire come è strutturato un framework potresti provare ad utilizzare Laravel.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Italy
    Messaggi
    139
    Quote Originariamente inviata da M4V1 Visualizza il messaggio
    Io per attenermi ad un modello MVC farei così:


    Model
    Una classe per ogni elemento che inserisci nel db, che estendono una classe base, chiamiamola Model


    Model - Classe base con metodi e proprietà comuni
    Recensione - che estende model ma ha metodi/proprietà specifici
    Guida - che estende model ma ha metodi/proprietà specifici
    Itinerario - che estende model ma ha metodi/proprietà specifici

    Puoi anche valutare di usare un ORM per semplificarti la vita.

    View
    Usa un template manager tipo blade o twig per gestire le view.
    Potrai creare blocchi riutilizzabili (tipo header e footer), e contenuti specifici per ogni url.
    Poi userai i dati presi dal db per popolare le varie view in maniera dinamica.


    Controller
    Classi che gesticono le operazioni tra model e view.
    In genere si crea un controller per ogni gruppo di operazioni, ma diciamo che ognuno ha le sue idee.
    Quanti e quali saranno i controller dipende un po' dalle operazioni che vuoi fare.
    Potresti avere per esempio:
    Controller per la gestione degli utenti (se il sito prevede di avere utenti loggati)
    Controller per l'area admin (se c'è un'area admin)
    Controller per visualizzare le notizie
    etc.


    Inoltre nei moderni framework vengono usati dei cosiddetti Service
    I service vengono utilizzati all'interno dei controller per appunto fornire servizi come accesso al database, routing, logging, invio email etc.
    Questi solitamente vengono iniettati tramite il costruttore del controller tramite il design pattern chiamato dependency injection. Creandoli separatamente, e non dentro ai controller, si introduce un ulteriore livello di astrazione che ne semplifica l'aggiornamento/modifica.


    In alternativa, per capire come è strutturato un framework potresti provare ad utilizzare Laravel.
    Ciao M4V1, purtoppo ho avuto degli impegni e non ho risposto subito.ì
    Ho strutturato il mio sito con il modello MVC, vorrei chiederti, quindi con le classi view realizzo semplicemente come andranno visualizzati i dati sulle pagine web?
    Ed i vari controller, quali operazioni tra view e model devono andare a gestire?
    So che possono essere domande banali, ma adesso mi è venuta una leggera confusione, sono andato sicuro solo sulla realizzazione delle model.

    Grazie ancora per l'aiuto!! :-)

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,445
    Quote Originariamente inviata da EziT90 Visualizza il messaggio
    quindi con le classi view realizzo semplicemente come andranno visualizzati i dati sulle pagine web?

    Ed i vari controller, quali operazioni tra view e model devono andare a gestire?
    Per esempio il controller chiama una certa funzione del model per richiedere dei dati dal database, una volta ricevuti questi dati, se necessario, li formatta e li passsa alla view per essere mostrati sulla pagina.
    Ultima modifica di Alhazred; 21-07-2018 a 12:23

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Italy
    Messaggi
    139
    Quote Originariamente inviata da Alhazred Visualizza il messaggio


    Per esempio il controller chiama una certa funzione del model per richiedere dei dati dal database, una volta ricevuti questi dati, se necessario, li formatta e li passsa alla view per essere mostrati sulla pagina.
    Grazie per la risposta Alhazred,
    quindi per esempio, nella pagina delle recensioni, che chiamo "recensioni.php", il codice che devo scrivere è quello del controller?
    Inoltre il template, impostando solo la formattazione della pagina, deve essere esteso dai CSS giusto?

    Grazie ancora per l'aiuto!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    In teoria si, però non ti conviene pensare a "pagine" ma piuttosto ad url e classi.

    Inoltre non ti consiglio di avere un file php per ogni pagina, bensì di reindirizzare ogni url ad index.php e li gestire le varie richeste. Questo si fa implementando un router, il quale non è altro che una classe che ti mappa un dato url ad una certa parte del tuo codice.

    Qui c'è una guida che benchè specifica del framework Laravel ti fa capire un po' come funziona il routing:
    http://www.html.it/pag/54739/gestire...g-con-laravel/

    Per quanto riguarda il css si, puoi usarlo per lo stile delle view, se usi un template engine è praticamente come inserire il css in una normale pagina html.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Italy
    Messaggi
    139
    Quote Originariamente inviata da M4V1 Visualizza il messaggio
    In teoria si, però non ti conviene pensare a "pagine" ma piuttosto ad url e classi.

    Inoltre non ti consiglio di avere un file php per ogni pagina, bensì di reindirizzare ogni url ad index.php e li gestire le varie richeste. Questo si fa implementando un router, il quale non è altro che una classe che ti mappa un dato url ad una certa parte del tuo codice.

    Qui c'è una guida che benchè specifica del framework Laravel ti fa capire un po' come funziona il routing:
    http://www.html.it/pag/54739/gestire...g-con-laravel/

    Per quanto riguarda il css si, puoi usarlo per lo stile delle view, se usi un template engine è praticamente come inserire il css in una normale pagina html.
    Ciao M4V1,

    quindi il mio sito deve avere "index.php" in cui scrivo tutto il codice? e per esempio una classe UrlMapping per mappare l'URL al punto del codice di "index.php"?
    Potresti farmi per favore anche un esempio in pseudo-codice? Sono leggermente confuso

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Scusa se ti ho fatto fare confusione, per� no, non avrai tutto il tuo codice in index.php.
    Quel file sar� solo il punto di accesso per la tua applicazione.

    Solitamente in index.php avrai qualcosa di questo tipo:

    codice:
    <?php
    require_once 'vendor/autoload.php';
    
    
    use tuonamespace\App;
    
    
    $App =  new App();

    La prima riga carica l'autoloader di composer, che io solitamente uso sia per gestire le dipendenze esterne, sia per caricare con l'autoloader le classi del namespace dell'applicazione (cos� ti eviti di usare tanti require per caricare le classi).

    La seconda istruzione dice a php che andremo ad usare la classe app.php che si trova all'interno del namespace dell'applicazione, che qui ho chiamato "tuonamespace" ma che ovviamente puoi chiamare come vuoi.

    Se non conosci composer, l'autoloading o i namespace vai a leggerti qualcosa, sono tutti concetti fondamentali nella programmazione oop.

    La terza istruzione invece istanza la classe App, a questo punto la gestione delle richieste � delegata a questa casse e quindi il tuo codice andr� li dentro. Nella classe App avrai per esempio la gestione delle route da cui richiamerai i vari controller e altre operazioni in base alle caratteristiche della tua applicazione. Ovviamente anche dentro la classe App potrai richiamare classi esterne per fare le varie operazioni, sempre attraverso l'uso dei namespace.

    Ora sono convinto di averti incasinato ancora di pi�

    Per iniziare vatti a vedere come funzionano:

    namespace
    composer
    autoloading (anche tramite composer)

    E vedrai che dopo anche questi concetti ti saranno pi� chiari.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2016
    Messaggi
    783
    Niente il forum sbrocca, questo è da cancellare.

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2016
    residenza
    Italy
    Messaggi
    139
    Ciao M4V1,

    Ho studiato il funzionamento dei namespace, composer ed autoloading, e devo dire che ho trovato più chiaro il tutto.
    Però mi resta sempre un dubbio, nel tuo esempio, dove la terza riga istanzia la gestione delle richieste con la classe App, li vado solo a gestire le richieste, e per esempio il logo del sito la navbar ed il resto va fuori?
    Per implementare un lato amministrativo, dove l'admin gestiste il database, basta aggiungere una pagina non linkata alle altre ed una classe con i metodi necessari?
    Ultima modifica di EziT90; 04-08-2018 a 10:25

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.