Верно ли, что большинство, если не все классы, которые реализуют этот единственный большой интерфейс, имеют множество методов, которые либо ничего не делают, либо выдают исключения?
Если это не так, и у вас есть большие большие классы с множеством различных проблем, то вам придется мучительный рефакторинг, но я думаю, что обработка этого рефакторинга сейчас - лучший подход - альтернативы, которые вы предлагаю просто толкнуть вас в разные плохие ситуации, откладывая боль за небольшую выгоду.
Одна вещь, которую можно сделать, это применить несколько интерфейсов к одному классу (на большинстве языков), так что вы можете просто создать свои новые интерфейсы и заменить один большой интерфейс на несколько меньших:
public class BigNastyClass : IBigNastyInterface
{
}
Идет к:
public class BigNastyClass : ISmallerInferface1, ISmallerInterface2 ...
{
}
Если у вас нет огромных классов, которые реализуют весь интерфейс, я бы решил эту проблему для каждого класса отдельно. Для каждого класса, который реализует этот большой интерфейс, введите новый конкретный интерфейс только для этого класса.
Таким образом, вам нужно реорганизовать код только по одному классу за раз.
DriverProvider, например, будет идти от:
public class DriverProvider : IBigNastyInterface
{
}
Кому:
public class DriverProvider : IDriverProvider
{
}
Теперь вы просто удаляете все неиспользуемые методы, которые ничего не делали, кроме простого удовлетворения большого интерфейса, и исправляете любые методы, в которые необходимо передать DriverProvider.