divisione delle classi

Ciao Gianni volevo sapere :

meglio una classe che fa tutto ? o tante piccole classi che fanno ad esempio:

gestione ricerca

gestione pannello utente

gestione pannello amministratore

gestione utenti

gestione annunci

gestione template

??? ?? ?? ??

e se è meglio usare tante piccole classi , come si integrano tra di loro?

se trattano tutte con dati diversi ( utenti , annunci ,template,ricerca ec..) non è più possibile integrarle tra di loro,vero?

io pensavo a una cosa del genere

classe user:

-classe amministratore extends user

-classe utente normale extends user

-classe moderatore extends user

classe annunci:

-classe aggiungi annuncio ( inutile secondo me, non sarebbero meglio tanti metodi per l'inserimento,modifica e rimozione degli annunci ( tutto subordinato ai permessi dell'utente ) ? )

non capisco come poter applicare un certo livello di astrazione per le altre classi :(

per utenti sarebbe facile

i metodi per gestire i permessi,e i pannelli utente in base ai permessi ed altro.

ma per le altre classi?!?!

e per ora non trovo altre classi su cui poter agire in modo gerarchico

 :bye:

inviato 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Ok ammettiamo che io abbia la classe utente strutturata in questo modo:

dove tutti i metodi sono erediti dalla classe genitrice user, fin qui tutto corretto spero :)

( quindi user contiente tutti i metodi per la gestione degli utenti, o sto sbagliando qualcosa ? i metodi aggiuntivi per alcuni utenti devono risiedere in user o in userAdmin,userModerator ? )

comunque ora volendo aggiungere anche un qualche tipo di collaborazione con i metodi della classe annunci, come potrei fare?

ammettendo che admin può aggiungerli,modificarli ed liminarli ( e vederli :2funny: ) il moderatore può aggiungerli ( in una maniera diversa ) modificarli ( solo quelli che gli appartengono ) e vederli ( come un utente)

e l'utente registrato può solo vederli, come potrei integrare annunci nelle classi in modo da avere anche con questi una certa astrazione?

Grazie 8)

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

una classe deve produrre oggetti, e fin quì ci siamo...

Un oggetto "software" deve rispecchiare un oggetto (reale o astratto) del mini-mondo che stai realizzando col programma.

Nel tuo programma ci sono gli utenti, che si diversificano (specializzano) in utenti semplici, moderatori e amministratori, ma sempre utenti sono! Ecco perché giustamente devi usare l'ereditarietà, mettendo nella classe base tutto quello che accomuna tutte le tipologie di utenti ed inserendo nelle classi che l'estendono le peculiarità di determinate categorie.

Gli annunci invece sono un'altro oggetto del tuo mini-mondo, quindi devono essere rapresentati con un'altra classe. Sarà questa a decidere se una determinata operazione può essere fatta. Ad esempio il metodo modifica, accessibile solo agli admin, potrebbe accettare come parametro un riferimento all'oggetto utente. Il metodo verifica poi se l'oggeto appartiene alla classe administrator e solo in questo caso eseguire l'operazione richiesta.

Ti ricordo che se lavori con PHP4 o PHP5 devi stare attento al diverso comportamento del passaggio di oggetti (copia, riferimento)

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

quindi la classe user dovrà essere di tipo abastract o avere dei metodi ( completi, cioè implementati ) e poi casomai modificare il loro comportamento in base ai parametri passati dalla classe che eredita?

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

A livello di logica secondo me la classe user deve avere solo le funzioni degli utenti normali e complete, le classi ereditano quelle ed estendono con le proprie, in base all'ordine gerarchico.

Administrator estende Moderator

Moderator estende User

User

risposto 9 anni fa
LonelyWolf
X 0 X

quindi i metodi aggiuntivi dovrebbero trovarsi rispettivamente nelle due classi di livello superiore ( inteso come permessi dell'utente )

ok :) e una volta definite tutte queste classi devo creare le instanze nella classe principale vero?

e se devo utilizzare un metodo della classe errors nella classe user come faccio?

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Mi spiace ma io mi fermo qui, non conosco bene le classi e rischio di spararle grosse, finché si parla di logica non c'è problema.

P.S.

Ma cosa intendi per classe errors?

Secondo me la gestione degli errori è una cosa a se stande, indipendente dagli utenti (anche se alcuni errori sono proprio gli utenti a farli! )

risposto 9 anni fa
LonelyWolf
modificato 9 anni fa
X 0 X

cioè una classe per la gestion degli errori in modo che non siano mai mostrati gli errori di php,

cmq c'è un metodo ( throwerror ) che si trova proprio nella classe degli errori e serve a mostrare o loggare un determinato errore, ma l'instanza della classe non voglio crearla dentro la classe user, se no ( mia opinione ) dichiararla lì e poi ridichiararla nella classe che istanzia user mi sembra un pò ridondante

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

La classe error è una di quelle che dovrebbero avere un'unica istanza (un solo oggetto) fruibile da tutte le classi.

Per ottenere questo risultato bisogna fare in modo che ogni classe abbia al suo interno una variabile membro (privata) contenente l'oggetto error. Però tale oggetto deve essere unico per tutte le classi che lo adoperano, quindi ogni classe avrà in realta un riferimento all'oggetto unico "error".

Per fare ciò si utilizza un "design pattern" chiamato singleton. In pratica la slasse errore deve avere un metodo statico che, richiamato la prima volta, serve ad istanziare un oggetto error e a restituirlo al chiamante, ma se chiamato successivamente resisuisce un riferimento all'oggetto error precedentemente creato.

Purtroppo la creazione di un singleton differisce da PHP 4 a PHP 5.

Fai un po' di ricerche e dimmi a che versione di PHP sei interessato.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

5 :D sto sviluppando tutto con php5 , i problemi saranno quando mi servirà l'hosting :D ( che risate mi farò )

sul mio libro c'è scritto questo :D, se non capisco , posto qui

:bye:

risposto 9 anni fa
Andrea Turso
Andrea Turso
86
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda