Например:
Скажем , у меня есть классы A, B, C. У меня есть два интерфейса, давайте называть их IAnimalи IDog. IDogнаследует от IAnimal. Aи Bесть IDog, а Cнет, но это IAnimal.
Важной частью является то, что не IDogпредоставляет никаких дополнительных функций. Он используется только для разрешения Aи B, но не Cдля передачи в качестве аргумента определенным методам.
Это плохая практика?
MyProject.Data.IAnimalи MyProject.Data.Animalлучше чем MyProject.Data.Interfaces.Animalи MyProject.Data.Implementations.Animal
Interfaceили Implementation, или в повторяющемся префиксе, или в пространстве имен, это тавтология в любом случае и нарушает DRY. Dogэто все, что вам нужно заботиться PitBull extends Dogтоже не нужна избыточность реализации, слово extendsговорит мне все, что мне нужно знать, прочитайте ссылку, которую я разместил в своем исходном комментарии.
IAnimalиIDogявляются страшными именами тавтологии!