Уже много раз видел костыли в коде, которые возникли только потому, что у разработчика была святая уверенность в непротекающую абстракцию. Мол, есть у нас тут вот такая абстракция и давайте вот так вот в шпагате присядем и добьёмся того, чтобы работало то, что надо чтобы работало и останемся в рамках парадигмы.
А нужно было всего навсего принять тот факт, что любая абстракция протекает и там, где она течёт, и нужно подставлять ведро по-больше.