Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [OOP] Null object pattern

    Sto implementando il Null Object Pattern per le mie classi, quindi dalla mia User ho estratto un'interfacca iUser contenente i metodi pubblici e da lì ho derivato un'altra classe NullUser i cui metodi non facciano nulla. NullUser implementa anche l'interfaccia vuota Null in modo che io possa controllare con $u instanceof Null oppure $u instanceof User se l'utente è anonimo o autenticato, e posso chiamare $u->puoiFareLaTalCosa senza preoccupazioni perché nel caso di NullUser restituisce sempre falso.
    Però sarebbe abbastanza ripetitivo e poco saggio ripetere il processo per altre 15-20 classi (Gruppo, sito partner, eccetera), non si può snellire il sistema in qualche modo?

  2. #2
    qual'e' la domanda? ... nel senso che di solito si sceglie un pattern in base a cio' che si vuole fare, non se ne prende uno a caso da riadattare ... dico male?

    [edit] qualche approfondimento interessante, anche il perche', il cosa non si deve fare, o il come implementare al meglio piu' alternative: http://www.cs.oberlin.edu/~jwalker/nullObjPattern/
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  3. #3
    L'approccio del pattern in questione è buono, utile, ma comporta troppo codice. Significa dover isolare N interfacce in più e creare N classi NullXxxxxx in più.
    La cosa che ho fatto è prendere la classe da cui ereditano le N classi (chiamata OtkRecord), estrarne l'interfaccia e fare un null object per quella. In questo modo posso chiamare i metodi dell'interfaccia iOtkRecord senza controlli sulla nullità dell'oggetto (per quelli propri della classe, che di solito sono molto pochi, ci sarà un controllo). E' corretto un tale modo di procedere?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.