Il nostro db è ottimizzato per il numero minimo di join (parzialmente denormalizzato). Per esempio. la nostra entità   User    contiene i dati dell'account (nickname, ID facebook, ecc.), le statistiche numeriche dell'utente (totale partite giocate, vincite totali, ecc.), le informazioni utente relative alla gilda (ID della gilda, tipo di iscrizione, ecc.) e così via - tutto in la stessa tabella. 
 Usiamo ORM - NHibernate. La tabella   user    è mappata (con tutti i campi) a   User    class. 
 Ora sto rifattorizzando una classe modello   AccountManagementService    che offre la possibilità di eseguire alcune azioni su un   User    racchiuso. Il modello ha le due dipendenze: NHibernate e l'entità   User   . La logica del modello è strettamente legata ai metodi ORM (esegue selezioni, aggiorna). 
 Penso che sia sbagliato che la modella conosca così tanti campi che non userà. Non ha bisogno di   User.GuildId   , statistiche, ecc. Ma dal momento che il modello dovrebbe già usare ORM è logico che dovrebbe conoscere le classi di entità. 
 Sono anche preoccupato che alcune operazioni con   User    debbano essere eseguite solo tramite servizi speciali, ma altri servizi possono teoricamente accedere e modificare qualsiasi campo di   User   . Per esempio.    AccountManagementService    non dovrebbe cambiare   User.Money    direttamente ma usare   UserMoneyService   . Ma da un punto di vista del compilatore tale cambiamento è perfettamente valido. 
Devo introdurre altri livelli di astrazione tra servizi ed entità per controllare un accesso e come posso farlo? Riesci a vedere altre possibilità per migliorare la situazione?