Logica oggetti

Ciao a tutti..

Ho un piccolo dubbio su come improntare un programma ad oggetti .

Ho ad esempio un salvataggio  di una pratica, che logicamente e' associata ad un particolare utente.

Nel programma completo poi avro' piu tipi di pratiche.

Quindi ..

Come posso implementare la struttura ad oggetti.

Visto che un'utente in realta' sara' un vero e proprio oggetto?

Tipo

avro' 2 classi ...PRATICA, UTENTE,

nella query all'interno di pratica, dovro' anche salvare l'utente relativo, quindi qual'e' il metodo piu corretto?

Creare un'utente all'interno di pratica in modo da utilizzare le funzioni dell'oggetto utente tipo

class pratica{
...
function saveNew($dati)
{
    ... 
    $user = new User();
    $user->checkExists().....
    
}

oppure creare una terza classe  tipo  MODULI?

class moduli
{
    $user = new User();
    $pratica = new PRatica();

    ....
   if($user->dontExists())
    $uid = $user->savenew($userdata);
      $pratica = savePRatice($dati,$uid);
....
}

Grazie mille a tutti ;)

inviato 9 anni fa
Ph03n1x
X 0 X

L'uso di un oggetto da parte di un altro oggetto è cosa normale e non prevede (generalmente) la presenza di oggetti che fungano da "colla"

Quello che devi verificare è se un oggetto usa un altro (cuoco usa pentole) oppure un oggetto è parte di un altro (manico è parte di pentola). Nel secondo caso l'oggetto "parte" è un attributo dell'oggetto contenitore.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Ok, grazie Gianni ;)

Be in questo caso per esempio io ho cliente che cmq sia e' un oggetto a se stante,

ma che mi e' indispensabile utilizzare all'interno della pratica in quanto

salvando la pratica questa viene associata ad un cliente, che se esiste bene, altrimenti viene creato

Quindi e' corretto il primo metodo giusto?

cioe' in una funzione della classe modulo ad es. creo un oggetto user. all'interno della funzione di salvataggio ..

MA e' corretto utilizzare che so la classe clienti senza ad esempio le variabili private usate come proprieta'..

cioe' utilizzando la classe solamente per interagire con "il database? "

Grazie mille ancora ;)

risposto 9 anni fa
Ph03n1x
X 0 X

una classe senza attributi normalmente si usa quando si vogliono raccogliere delle funzionalità. Si parla di classi  statiche in questi casi. La classe cliente invece dovrebbe avere degli attributi con i dati del cliente (si parla in questo caso di classi entity) quindi è strano quello che suggerisci.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

.....e quindi ..come posso ad esempio implementare una classe utente che controlli l'esistenza di un particolare utente, che salvi un'utente sul db e via dicendo ?

cioe' dovrei fare una classe utente del  tipo:

class user{
        private $nome;
        private $cognome;

        public function checkExists(?????)
        {
            //controllo nel db se c'e $this->nome e $this->cognome nel db
        }

        public function save();
        {
             //Salvo nome e cognome nel db
         }

Ma in questa maniera ho un problemino ...

come faccio ad esempio a caricare i dati di un utente nella classe o ancora come potrei ad esempio

fare operazioni come la stampa di tutti gli utenti ecc?? ...grazie mille per l'aiuto che mi stai dando gianni,

credo che siano cose importantissime queste per sviluppare ad oggetti ;)

risposto 9 anni fa
Ph03n1x
X 0 X

Per l'elenco non usi la classe fai una semplice select di tutti e stampi con un ciclo l'elenco.

Per caricare i dati di un utente puoi farlo quando istanzi il nuovo oggetto, si collega al db e carica.

risposto 9 anni fa
LonelyWolf
X 0 X

Grazie mille,

allora ti spiego, queste classi dovranno poi essere utilizzate con un'altro framework ajax attraverso un wrapper,  da questo il bisogno di avere che so ...le query di stampa dei risultati, tipo la lista degli utenti direttamente da una funzione di classe...come potrei fare secondo te?

Caricare i dati di un utente direttamente nel costruttore intendi ? o passandogli l'id e un array di dati, cosi che se l'id e' nullo viene inizializzato l'utente con i dati passati altrimenti viene caricato nella classe l'utente scelto ?

che ne pensi ?

risposto 9 anni fa
Ph03n1x
X 0 X

Caricare i dati di un utente direttamente nel costruttore intendi ? o passandogli l'id e un array di dati, cosi che se l'id e' nullo viene inizializzato l'utente con i dati passati altrimenti viene caricato nella classe l'utente scelto ?

che ne pensi ?

Io nel costruttore per una mia classe (che sto ancora lavorando) ho messo 2 parametri, $id, $dati=NULL (ovvero se non passi dati rimane nullo) all'inizio controllo $dati se è nullo recupero e imposto i dati dal db, altrimenti recupero i dati li inserisco e li imposto nell'oggetto così sono già disponibili.

Grazie mille,

allora ti spiego, queste classi dovranno poi essere utilizzate con un'altro framework ajax attraverso un wrapper,  da questo il bisogno di avere che so ...le query di stampa dei risultati, tipo la lista degli utenti direttamente da una funzione di classe...come potrei fare secondo te?

Secondo me la lista degli utenti non è il caso di metterla nella classe utente, puoi valutare di fare una classe ad hoc per ottenere l'elenco di qualsiasi tabella passando come parametro al metodo  costruttore il nome della tabella da elencare, così la potresti utilizzare anche per elenco pratiche e qualsiasi altro elenco tu abbia.

risposto 9 anni fa
LonelyWolf
X 0 X

Perfetto , hai ragione..tipo

class tableform 
           {
                ...
           }
 
Io nel costruttore per una mia classe (che sto ancora lavorando) ho messo 2 parametri, $id, $dati=NULL (ovvero se non passi dati rimane nullo) all'inizio controllo $dati se è nullo recupero e imposto i dati dal db, altrimenti recupero i dati li inserisco e li imposto nell'oggetto così sono già disponibili.

Anche io sono arrivato a questa soluzione alla fine...mi sembra la piu adatta.

Ma nel caso avessi ad esempio, nella classe utente, i vari recapiti...che logicamente in un db sono in una tabella distinta...secondo te mi conviene mettere tutte quelle proprieta , tipo telefono1 , telefono2 , mail , fax, indirizzo, citta, cap ecc..

o potrei trovare un modo alternatico ...tu che ne pensi? ho paura che verrebbe un numero incredibile di variabili all'interno della classe , che risulterebbe anche piuttosto complicato da gestire...

che ne pensi?

Inoltre vorrei poter salvare completamente un'utente utilizzando una sola funzione...anche eventualmente utilizzzando una classe apposta per gestire gli indirizzi ecc...e' logicamente corretto secondo te?

Ho visto molti esempi, ma diciamo che ci sono talmente tante soluzioni che capire quel'e' la piu appropiata.. e' un bel problemino, per questo vorrei sapere cosa ne pensa ..chi ha un po piu di esperienza ;)

Grazie mille.

risposto 9 anni fa
Ph03n1x
X 0 X

Più esperienza non credo, ho appena iniziato a lavorare con gli oggetti!

cmq io metto tutto nella classe, perchè ho un indirizzo specifico, per i clienti (che è una classe ulteriore ed estende la precedente) che hanno + destinazioni in una tabella differente ho ulteriori indirizzi penso che farò un metodo per recuperarli, ma vedrò poi.

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