Если бы я был вами, я бы попытался придерживаться SRP, но не так строго, как усилие, наконец, станет контрпродуктивным. Итак, теперь, когда вы сказали, что вам делать? Либо вы реализуете IComparable, либо имеете полное сравнение в объекте, либо имеете отдельный компаратор и реализуете в нем логику сравнения. Теперь для сравнения, что касается SRP, если сравнение является довольно простым и не должно меняться, я бы выполнил IComparable и покончил с этим. Если вы можете разумно предвидеть некоторые изменения в будущем, или если сравнение использует регистр-зависимое, то я бы пошел по пути компаратора. Конечной целью является разработка закрытых компонентов и их взаимодействие, составление их, поэтому, если сравнение имеет мало шансов на изменение, компонент может быть закрыт, и вы не услышите об этом снова. Вы также можете прокомментировать использование IComparable в своем коде, и если некоторые изменения произойдут в будущем, переключитесь на составление с компаратором, так как изменение, которое, как говорили, не произошло, действительно произошло.
Как насчет провайдера? И SRP, и ISP являются частью SOLID, поэтому не должны конфликтовать. –