Crea classi diverse per membri dello staff e utenti?

3

Sto costruendo un programma per uno studio legale.

Quando un membro dello staff è attivo (cioè lavora ancora presso l'azienda) ha una password per accedere al programma; Quando un membro del personale è inattivo (cioè non lavora più nello studio) perde la sua password, ma i suoi dati sono ancora registrati nel database (informazioni personali, descrizione del lavoro precedente ecc.).

Dato che uno staffer non è sempre un utente del programma, ma ogni utente è uno staffer, ho pensato di descrivere le classi come questa:

class Staffer
{
    /* Fields and methods */
}
class User : Staffer
{
    string password;
}

Quando aggiorno uno dei campi degli oggetti, viene aggiornato anche il database (utilizzando un gestore di eventi per l'evento PropertyChanged ).

Ho una schermata nel programma per aggiornare le informazioni di un dipendente, inclusa la sostituzione della sua password . Questa schermata aggiorna l'oggetto che rappresenta il dipendente.

Ma quale oggetto dovrebbe rappresentare il dipendente? Se, ad esempio, voglio aggiornare solo l'indirizzo, non ho motivo di creare un oggetto User s, quindi creerò un'istanza della classe Staffer . Ma se voglio aggiornare la sua password, ho bisogno di istanziare la classe User per rappresentarlo. Qual è l'approccio migliore in una prospettiva OOP? Forse dovrei creare solo una classe Staffer e inserire il campo password lì senza User class?

    
posta Sipo 27.05.2016 - 10:26
fonte

1 risposta

5

Mi sembra che tu abbia una classe (diciamo Staffer ). La capacità dello staffer di utilizzare un programma è un attributo (o forse più strettamente, una relazione tra uno staffer e un programma).

Immagina di avere più accessi / programmi. Come lo modellerai? Non è possibile farlo istanziando utenti diversi per programmi diversi. Penso che sarebbe molto più intuitivo fare qualcosa del tipo:

class Staffer {
   val allowedPrograms : Seq[Program] = ...

   def denyAccess(program : Program)
   def allowAccess(program : Program)

}

(in pseudo-codice Scala-ish)

    
risposta data 27.05.2016 - 11:19
fonte

Leggi altre domande sui tag