Prefijar interfaces con I?
Actualmente estoy leyendo "Clean Code" de Rober Martin (UncleBob), y en general me encantan las reflexiones de UncleBob. Sin embargo, me confundí un poco cuando leí que evita las interfaces de prefijos como "IPerson". Él dice "No quiero que mis usuarios sepan que les estoy entregando una interfaz".
Pensando en la perspectiva de TDD / inyección, siempre me interesará contarles a los "usuarios" de mis clases que estoy entregando una interfaz. La razón principal es que considero los contratos de Interfaces entre los diferentes "agentes" de un sistema. Un agente que trabaja con una esquina de mi sistema, no debe conocer la implementación concreta del trabajo de otro agente; solo deben intercambiar contratos y esperar que los contratos se cumplan sin saber cómo. La otra razón, pero también muy importante, es que una interfaz se puede burlar por completo y, por lo tanto, hace que las pruebas unitarias sean mucho más fáciles. Hay límites sobre cuánto puedes burlarte de una clase concreta.
Por lo tanto, prefiero visualizar que de hecho estoy entregando una interfaz ... o tomando una interfaz como argumento. Pero como UncleBob es un campeón de peso pesado en nuestra comunidad, y yo soy solo otro jinete de escritorio de peso pesado, me gustaría saber si me estoy perdiendo algo.
¿Está mal para mí insistir en que estoy en las interfaces?