Без заголовка
Вопрос не праздный. "Вынос за скобки функциональности" в реальной системе очень часто оборачивается дикими костылями, когда вдруг надо реализовать что-нибудь более-менее интересное.
Т.е. все эти слои на деле оказываются дико связанными. "Протечка абстракции" вообще очень частая вещь. Вот если сходить на какую-нибудь Java-конференцию, добрая треть докладов будет про кишки JVM и какая боль происходит, если забыть о том, что там лежит на уровне байт-кода или даже еще ниже, на уровне железа.
Если же делать еще более высокоуровневые вещи, то любая нестандартная задача потребует вернуться на уровень ниже и еще ниже. Уж лучше тогда просто работать в рамках языка общего назначения и не рыпаться.