Å bruke I foran C sharp interfaces

Det virker på meg som om mange er imot det å bruke I foran interfaces i C#. F.eks IBookService for BookService klassen. Sam Newman, og Code Aesthetic er de to jeg kommer på i farten som er mot dette.

Argumentasjonen mot å bruke det er at man ikke skal vite om implementasjonen er et interface, en konkret implementasjon eller en abstrakt klasse.
Om man skriver et gjenbrukbart bibliotek, eller akademisk kode gir dette mening. Man kan da ha mange implementasjoner av samme interface. Men i praksis, når man skriver kode som skal ut i produksjon, så har man i praksis bare én implementasjon. Interfacet brukes i grunn kun for å kunne mocke implementasjonen i unit tester.

Man endrer også kode hele tiden. Å bruke masse tid på å lage et generisk interface er dårlig bruk av tid, da kravene vil endre seg drastisk i fremtiden. Da er man som regel nødt å lage et nytt interface og tilhørende implementasjon uansett.

I praksis er jeg derfor interessert i å kunne enkelt se forskjellen på et interface og en implementasjon. Når jeg bruker (det fantastiske) dependency injection rammeverket til moderne dotnet, vil jeg være sikker på at det jeg spør om i konstruktørene mine er interfacet og ikke implementasjonen, slik at jeg enkelt kan mocke det i unit testene mine.