в общем не плодите сущности без необходимости. вся суть ООП - это дерево, наследования признаков, в реально мире полная лажа и ерунда. вот эта утопия загнать все в один базовый класс - она не приживается нигде. и тенденция идет не на то, чтобы пихать все в один класс. а на то, чтобы подходить к этому по крайней мере разумно. поэтому, делать иерархию с одного базового интерфейса, считаю необуманной, если это не пет рпоект на 2 класса, и 3 коммита, нет дургой тимы, которая хуй знает что наворотит с базовым интерфейсом или его имплементацией, что в результате появятся классы монстры, или классы инвалиды, так еще будут ломаться классы-наследники, юнит тесты и все вообще, потому что иерархия поразумевает низменяемость АПИ. а в реальной жизни так не бывает. то есть чем выше по иерархии изменения, тем сильнее "эффект бабочки", согасно теории хаоса, когда нибудь, все дойдет до состояния, когда добавления в самый верхний класс, самого невинного интерфейса, IQueryable, приведет к тому, что вся система ебнется с грохотом, особенно если где-то что-то имплементирован явно IQueryable, и в качестве интерферса дочернего, или неявно. в общем, суть в том, что иерархия должна быть неизменемой, нерасширяемой, и не модифицируемой. присели, все продумали, написали. подходит под водопадный процесс, когда все можно спроектировать заранее. когда у заказчиа меняются требования. тут воткните ту, тут это, ничего из классического ООП с связке с FVP и разработке в agile, не заработает, придется попотеть чтобы это начало приносить сомнительные плоды