Una cosa che vedo in alcune app aziendali DDD su cui lavoro è l'uso di interfacce identiche alle entità di dominio, con una mappatura one-to-one di proprietà e funzioni. Infatti, un oggetto dominio viene sempre utilizzato attraverso la sua interfaccia one-to-one e tutte le entità dominio hanno un'interfaccia one-to-one in questo stile.Le interfacce one-to-one con entità di dominio sono buone o cattive? Perché?
Ad esempio:
oggetto Dominio Account:
public class Account : IAccount
{
public string Name {get;set;}
//...some more fields that are also in IAccount
public decimal Balance {get;set;}
}
Ed è corrispondenza interfaccia
public interface IAccount
{
string Name {get;set;}
//... all the fields in Account
decimal Balance {get;set;}
}
Ma ultimamente sono diventato sempre più convinto che questo è, infatti, un anti -modello.
L'ho gestito da alcuni architetti della comunità open source, e dicono che questo si basa su errori di progettazione o difetti, da qualche parte sulla catena del design.
Quindi dico ai miei colleghi che dovrebbero smettere di creare interfacce per gli oggetti Dominio. Perché non c'è scopo per loro e devi aggiornare l'interfaccia ogni volta che aggiorni le entità di dominio.
Prima si affermava che queste interfacce fornivano il "disaccoppiamento", ma io contromano perché le interfacce hanno una relazione uno-a-uno con le entità di dominio che in realtà non forniscono alcun disaccoppiamento, una modifica all'interfaccia significa un cambiamento nell'entità del dominio e viceversa.
La prossima affermazione è che abbiamo bisogno delle interfacce a scopo di test. Il mio contatore è che Rhino-mock prevede il beffeggiamento e lo stub delle classi concrete. Ma sostengono che Rhino-mock ha problemi con lezioni concrete. Non so se lo compro, anche se i rinoceronti hanno problemi con le classi concrete, questo non significa necessariamente che dovremmo usare le interfacce per le entità di dominio.
Quindi sono curioso:
Perché si hanno interfacce one-to-one per i vostri entità del dominio?
Perché no?
Perché è una buona o cattiva pratica?
Grazie per la lettura!
EDIT: Devo notare che uso sempre le interfacce e credo che, se richiesto, userò un'interfaccia in un batter d'occhio. Ma mi riferisco in particolare alle entità di dominio con interfacce one-to-one.
AFAIK Rhino Mock non può simulare i metodi di classe concreti a meno che non siano sovrascrivibili. Quindi dovresti rendere virtuali tutti i metodi degli oggetti di dominio. Non bene. –
Correlati: http://stackoverflow.com/questions/2659366/java-interfaces-methodology-should-every-class-implement-an-interface – jaco0646