Supponiamo la modellazione del modello User
in un contesto di un social network.
Il concetto di utente è composto da due nozioni:
- Elementi di autenticazione come userName / Password / Email ecc ...
- Informazioni aggiuntive sui dati a volte denominate "Profilo utente" come firstName, compleanno, immagini ecc.
A prima vista, questa analisi implica la separazione di compiti / responsabilità se vogliamo mantenere SRP.
Tuttavia, tipicamente nel caso di un social network, userName può essere visto come una pura informazione appartenente al profilo di un utente piuttosto che un puro elemento di autenticazione.
Quindi, secondo me, ci sono tre modi per modellare il concetto User
.
In primo luogo, l'intero in una classe:
User
(userName, password, email, firstName, compleanno, immagine ecc ...)
In secondo luogo, una relazione uno-a-uno tra User
e UserProfile
:
User
(userName, password, email)
UserProfile
(firstName, birthday, picture etc ...)
Terzo, uno a uno, ma con una ridondanza dei campi comuni (essendo focalizzato sull'autenticazione come informazione utente visibile sul sito Web):
User
(userName, password, email)
UserProfile
(userName, firstName, birthday, picture etc ...)
Perché la ripetizione qui? Ovviamente per la fiducia e allo stesso tempo evitare i join nei casi di database relazionale quando si desidera recuperare i dati di ciascun profilo di Use.
Che cosa è una buona pratica per modellare questi due concetti?
Dove posizionare il campo userName
?
Dilemma being: mantenere KISS (Keep it simple stupid!) o SRP;)