Sarebbe una buona pratica separare un'entità utente e un'entità profilo utente?

1

Quando si progetta un sistema che visualizza informazioni su un'entità (ma dove la modifica dei dati è rara o limitata a pochi utenti - come un profilo utente), avrebbe senso avere due classi separate per fare ciò?

Uno per la gestione di un profilo utente (accesso, modifica della password, modifica del contenuto del profilo) e un altro esclusivamente per il consumo di questi dati (un profilo utente / UserView) che può solo recuperare i dati visualizzati per l'utente.

  1. È una scelta sensata da fare?
  2. Ci sarebbero motivi di sicurezza in questo stile di architettura?
  3. Questo viola il concetto di modellazione di un'entità come una singola classe? (e ci sono casi in cui ciò è accettabile / previsto?)
  4. Esistono schemi o best practice comuni per modellare un'entità in questo modo?

Lavoriamo sul presupposto che si tratti di un profilo di social media.

    
posta Neil P 16.08.2016 - 11:31
fonte

2 risposte

1

Per rispondere alla tua domanda, ci sono diversi aspetti a cui pensare.

A seconda di come vedi user , user -Information può essere modellata come parte di userprofile o viceversa:

user = {
         "lastname": "Doe",
         "firstname": "John",
         "id": "a972f435-5263-401a-a03b-950e9e0e29c1",
         "birthday": "1970-01-01"
       }

Non c'è niente di sbagliato in questo tipo di dati. Se utilizzi un backend in grado di gestire JSON, puoi memorizzarlo subito.

D'altra parte, a seconda di quanto dettagliato è il tuo user , ha senso separare user -data da profile -data; o forse hai bisogno di utilizzare database diversi per scopi diversi: ad esempio, hai un login -servizio che serve l'unico scopo a log in utenti: in tale scenario ha perfettamente senso avere il tuo user in un posto e profile in un altro (forse stai usando MongoDB o qualcosa del genere).

Is this a sensible choice to make?

Non esiste una soluzione generale a questo. È una domanda filosofica piuttosto senza contesto. Un bel argomento per una discussione scolastica sull'architettura.

Would there be any security reasons in this style of architecture?

Purtroppo non sono un esperto di sicurezza per darti una risposta dettagliata a questo. Devi comunque proteggere il tuo sistema. Dal punto di vista della sicurezza, potrebbe avere senso dividere tra user e profile o superiore: user , profile , creditcard -data in tre diversi database. Ma questa è un'ipotesi ingenua. Ci sono persone che sono più sicure di me;)

Would this violate the concept of modelling an entity as a single class? (and are there instances where this is acceptable/expected?)

Are there any common patterns or best practices for modelling an entity in this way?

Come detto sopra: ci sono ragioni per gestirlo in un modo o nell'altro. Vorrei andare con finché non hai motivo di dividere realmente i dati, tenerli tutti insieme . Cerca soluzioni semplici in primo luogo e evolvi il tuo sistema insieme alle tue esigenze.

    
risposta data 16.08.2016 - 22:34
fonte
1

User e UserProfile sono entità diverse allo stesso modo User e BankAccount sono entità diverse.

Nel caso di visualizzazione di informazioni, ogni entità ha la responsabilità di visualizzare le sue informazioni, anche se User può delegare parte della sua possibilità di visualizzare la possibilità di recupero alla sua UserProfile .

    
risposta data 16.08.2016 - 18:25
fonte