Istanza utente al momento dell'accesso

0

Sto pensando di implementare un sistema con una super classe chiamata User e 2 sottoclassi della classe User, denominata Venditore e Acquirente. Sono tipi specifici di utenti.
Quindi, ho 3 file con 3 classi:
- Utente.php (utente di classe)
- Seller.php (venditore di classe estende utente)
- Buyer.php (l'acquirente di classe estende l'utente)

Quando c'è una sessione che indica che l'utente è loggato, voglio creare il tipo di utente oggetto corrispondente (venditore o acquirente).
Il mio primo istinto era istanziare la classe User con l'ID di sessione dato e quindi, all'interno, istanziare il sottotipo corrispondente. Ma credo che questo sia estremamente scorretto perché sto provando a creare un'istanza di una sottoclasse dall'interno di una superclasse.

Qual è l'approccio migliore per implementare un sistema del genere?

    
posta random425 07.04.2017 - 04:50
fonte

4 risposte

1

Crea un'interfaccia comune quando l'utente ha effettuato il login crea un'istanza del venditore o dell'acquirente e imposta l'oggetto.

pseudo:

interface IUser {
   name: string;
   id: number;
}
abstract class User extends IUser{
  // common functionality
}
class Seller implements User extends IUser{}
class Buyer implements User extends IUser{}

// login code
let user: IUser;
if (loggedinuser is seller) {
  this.user = new Seller({...data});
} else if (loggedinuser is buyer) {
  this.user = new Buyer({...data});
}
    
risposta data 07.04.2017 - 16:18
fonte
3

Preferisci la composizione all'eredità.

Hai una classe generica User che ha tutti gli attributi comuni, come il nome di accesso, la posta elettronica, ecc.

Avere classi separate che descrivono ruoli dell'utente, ad es. Seller e Buyer (e forse anche Admin , ecc.)

Crea un oggetto User riferimento a uno (o più) oggetto ruolo per descrivere il ruolo dell'utente.

In questo modo, puoi facilmente assegnare e revocare i ruoli dagli utenti, aggiungere nuovi ruoli e avere un controllo generalmente più preciso su ciò che un utente è autorizzato (o meno) a fare. Il codice sarà anche più pulito e non dovrai mai controllare a quale sottoclasse appartiene un utente e se è disponibile un determinato metodo.

    
risposta data 07.04.2017 - 16:29
fonte
2

Utilizza una classe UserFactory o un metodo factory all'interno della classe User . Tale factory / metodo crea un Seller o un Buyer in base alle informazioni contenute nella sessione.

    
risposta data 07.04.2017 - 08:58
fonte
0

Se hai creato un venditore o un acquirente all'interno della classe User, allora sarebbero oggetti diversi e non correlati e di solito non è quello che vuoi fare. Vuoi davvero creare un'istanza della sottoclasse Venditore o Acquirente con l'ID definito come un elemento della classe Utente e accessibile, se necessario, dalle sottoclassi. Fammi sapere se hai bisogno di ulteriori chiarimenti.

    
risposta data 07.04.2017 - 05:44
fonte

Leggi altre domande sui tag