Related classes around generic types
You have the tightest coupling of interfaces I have seen in my life. You are also restricting them in abnormal manners. For example, IDrawer should not need to know about the IAnimalModel. Instead, it should be worried about IDrawableModel, which IAnimalModel can worry about. This way, the coupling is reduced and things are coupled with appropriate interfaces/classes. You want to reduce your coupling to only couple around what needs to depend on what else. Things that are generic like IDrawer shouldn't have to worry about more specific things. They should be, well, for the buzzword: generic.

Think about it as "what happens if I need something else to draw?" If you have another class/interface that has to draw something, and you need to modify IDrawer to count that in, then something is fishy.



You could test this better by developing around Test-Driven Development. You have interfaces for a reason, they are also very good at TDD. It's easy to mock things with them. (So that you can verify that whatever the thing is works. Especially with generics.)



Please do us all a favour and format your code more appropriately. C# does not use Egyptian braces (at least, not by any best-practices). (Java and JAVA do, but this is neither Java nor JAVA.)


namespace GenericInterface
{
    public interface IDrawer
    {
    }

    public interface IDrawer&lt;TModel&gt; : IDrawer
      where TModel : IAnimalModel&lt;TModel&gt;
    {
        void Draw(TModel model);
    }