Cerco di programmare su un'interfaccia ogni volta che è possibile, ma non mi è chiaro come potrei applicarlo a un modello così vasto come un utente. Che può contenere molti campi disparati (nome, età, numero di telefono, ssn, ecc.) O essere composto da molti moduli.
Potrei progettare una libreria di funzionalità generiche da utilizzare tra le applicazioni, che potrebbe contenere un ICallable per effettuare una telefonata o Inameable per visualizzare un nome sulla console. Ma alla fine la classe utente (il modo in cui i dati sono accessibili e / o memorizzati) sarebbe unica per un'applicazione e le sue esigenze.
Se provo a progettare l'utente e i consumatori nella libreria (sopra indicata) per comunicare per interfaccia, ottengo una "zuppa di interfaccia" (o qualcosa di "hydra-esque") sulla classe utente. Dove mi sembra di estendere un'interfaccia per quasi tutti gli attributi o moduli.
public class Employee : INameable, ICallable, IAgeable, IPayable ...
Questo è particolarmente sbagliato? Sto sfruttando troppo l'interfaccia evitando completamente l'iniezione di classi concrete nel consumatore (e impedendo un uso più generale)?
Qual è un approccio migliore a questo problema?