Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    il dilemma delle classi

    Ciao ragazzi,
    vorrei porvi un quesito al quale io non ho ancora trovato soluzione definitiva.

    Immaginate di avere la vostra classe Post per la creazione di un blog. Avrà i vari metodi setAutore, getTesto, getTitolo, ... insomma tutto quello che serve alla corretta creazione e visualizzazione di un articolo.

    Quando però si presenta il momento di mostrare i 10 post più recenti (per esempio), come vi comportate?
    Create 10 oggetti diversi dalla classe Post? Non è dispendioso in termini di risorse?

  2. #2

  3. #3

    Re: il dilemma delle classi

    Originariamente inviato da Tobler
    Ciao ragazzi,
    vorrei porvi un quesito al quale io non ho ancora trovato soluzione definitiva.

    Immaginate di avere la vostra classe Post per la creazione di un blog. Avrà i vari metodi setAutore, getTesto, getTitolo, ... insomma tutto quello che serve alla corretta creazione e visualizzazione di un articolo.

    Quando però si presenta il momento di mostrare i 10 post più recenti (per esempio), come vi comportate?
    Create 10 oggetti diversi dalla classe Post? Non è dispendioso in termini di risorse?
    Beh, direi che è pò bruttino usare nomi un pò in inglese ed un pò in italiano Detto questo, veniamo al vero dilemma: si, io instanzio N classi contenenti le informazioni necessarie.

    Non è affatto dispendioso perché alla fin fine è quello che faresti normalmente con un array, ne più ne meno con il vantaggio, però, che essendo un oggetto viene nativamente passato per riferimento (su php5) evitando rischi di lasciare quest'oggetto qua e la sperduto per la memoria

    In questo caso ci sarebbe un metodo statico per la classe Post, o un metodo per la classe Posts, che mi restituirebbe o una collezione di elementi Post o una classe PostCollection che implementato l'interatore mi permetterebbe di integrarla con tutto quello che mi potrebbe servire

  4. #4

    Re: Re: il dilemma delle classi

    Originariamente inviato da daniele_dll
    Beh, direi che è pò bruttino usare nomi un pò in inglese ed un pò in italiano
    Eheh sai... getTitolo è più corto di leggiTitolo

    Non è affatto dispendioso perché alla fin fine è quello che faresti normalmente con un array, ne più ne meno con il vantaggio, però, che essendo un oggetto viene nativamente passato per riferimento (su php5) evitando rischi di lasciare quest'oggetto qua e la sperduto per la memoria
    Ottimo, questo mi rassicura sulla questione risorse utilizzate.

    In questo caso ci sarebbe un metodo statico per la classe Post, o un metodo per la classe Posts, che mi restituirebbe o una collezione di elementi Post o una classe PostCollection che implementato l'interatore mi permetterebbe di integrarla con tutto quello che mi potrebbe servire
    Non sono sicuro di seguirti: posto che il metodo statico di Post sia una scorciatoia per evitare di doversi istanziare a mano N oggetti dalla classe Post (spero di aver compreso ) , non sarebbe più corretta - o forse più semplice a livello logico - la prima versione, quella che restituisce un'array di elementi Post?

    Naturalmente correggimi se sbaglio. Ti ringrazio per gli spunti di riflessione molto interessanti.

  5. #5

    Re: Re: il dilemma delle classi

    Originariamente inviato da daniele_dll
    In questo caso ci sarebbe un metodo statico per la classe Post, o un metodo per la classe Posts, che mi restituirebbe o una collezione di elementi Post o una classe PostCollection che implementato l'interatore mi permetterebbe di integrarla con tutto quello che mi potrebbe servire
    Penso che Daniele voleva dirti che sarebbe opportuno creare una classe che sia un gestore dei tuoi oggetti Post.
    Ossia Post viene usato per rappresentare un singolo articolo, con le sue proprietà ed attributi, dopodiché occorrerebbe una classe tipo gestorePost che appunto ti consenta di fare operazioni complesse sugli articoli.
    Per intenderci nel tuo caso, non avrebbe molto senso mettere all'interno della classe Post (che viene usata per descrivere un singolo Post) un metodo in cui tu poi ritorni una lista di N Post, e quindi un metodo in cui tu instanzi N Post.

  6. #6
    Ok allora stiamo parlando di una "superclasse" che restituisce "blocchi" di oggetti Post pronti per essere manipolati.

    Bella dritta!

  7. #7
    Scusate se tiro su di nuovo questo 3d ma mi è sorto un dubbio.

    Fingiamo di voler pescare tutti i post esistenti: la nostra "superclasse" GestorePost o Posts farà una select per vedere quanti post ci sono nel database e (correggetemi) in base ai risultati creerà mediante un ciclo for tanti oggetti Post quanti sono espressi dal database.

    A questo punto io mi aspetto un return: questo sarà un array di oggetti Post?

    E dunque dovrò utilizzare questo array nel modo seguente

    Codice PHP:
    $posts[0].leggiTitolo() 
    $posts[0].leggiCorpoTesto()

    ...

    $posts[n].leggiTitolo()
    $posts[n].leggiCorpoTesto() 
    Può avere senso una gestione simile?

  8. #8
    Si è così. Però potresti anche usare il foreach se devi fare le stessi azioni su ciascun elemento dell'array di post che ti viene ritornato.

    foreach ($posts as $current_post)
    {
    $current_post.leggiTitolo()
    $current_post.leggiCorpoTesto()
    ........
    }

    Ovviamente dipende da ciò che devi fare

  9. #9
    Originariamente inviato da gianf_tarantino
    Si è così. Però potresti anche usare il foreach se devi fare le stessi azioni su ciascun elemento dell'array di post che ti viene ritornato.

    foreach ($posts as $current_post)
    {
    $current_post.leggiTitolo()
    $current_post.leggiCorpoTesto()
    ........
    }

    Ovviamente dipende da ciò che devi fare
    Sì esatto, la gestione dei singoli post può venire fatta in mille modi - uno alla volta, ciclo for, foreach etc.

    Grazie ancora a tutti per l'illuminazione.

  10. #10
    Originariamente inviato da Tobler
    Scusate se tiro su di nuovo questo 3d ma mi è sorto un dubbio.

    Fingiamo di voler pescare tutti i post esistenti: la nostra "superclasse" GestorePost o Posts farà una select per vedere quanti post ci sono nel database e (correggetemi) in base ai risultati creerà mediante un ciclo for tanti oggetti Post quanti sono espressi dal database.

    A questo punto io mi aspetto un return: questo sarà un array di oggetti Post?

    E dunque dovrò utilizzare questo array nel modo seguente

    Codice PHP:
    $posts[0].leggiTitolo() 
    $posts[0].leggiCorpoTesto()

    ...

    $posts[n].leggiTitolo()
    $posts[n].leggiCorpoTesto() 
    Può avere senso una gestione simile?
    si esatto, o fai ritornare un array o fai ritornare, se usi php 5.2 e successivi [per sicurezza per lo più] un oggetto che estenda la classe Iterator o IteratorAggregate ( http://it.php.net/iterator ) ... questo sempre in tema di flessibilità del codice

    Infatti, se dovrai mai avere la necessità di rendere tutto ciò trasparente puoi benissimo restituire l'oggetto post che, invece di contenere già i dati, può acquisirli direttamente al primo accesso ... usando l'iterator sai chi vuole accedere all'elemento e fai recuperare i valori

    Altro sistema molto usato sono gli accessor, che in php non esistono, ma sono quelli che usavi tu get/setNAME

    O ancora un altra tecnica utilissima sono i proxy per gli oggetti: sempre riferito al discorso cache ... non è detto che tu acquisisca un oggetto e, l'istruzione successiva, lo usi in tutte le sue parti di conseguenza se è possibile ottimizzare puoi spostare il codice nell'oggetto proxy in modo che se vengono richiamate funzioni direttamente venga messo tutto in cache (qui il discorso è un pò più complesso ma comunque importante )

    PS: i nomi dei metodi stanno meglio in inglese

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.