Допустим, что есть некая архитектура, в которой пять слоёв:
1) уровень работы с кодировками текста и форматами файлов
2) уровень текстовых операций редактора текстов (добавить отступ для группы строк)
3) уровень элементов и атрибутов xml-формата
4) уровень объектов абстрактного проекта msbuild
5) уровень объектов C# программы в формате .csproj
В каждом слое есть своё API, свои наборы операций, свои структуры данных и константы.
Если хочется иметь полный контроль над всем,
но при этом не давать доступ к нижним уровням на прямую,
то каждый более высокий оказывается объёмнее предыдущего (так как включает всё что уже есть ниже, но по-своему).
Идея такова — разрешить пользоваться API всех уровней, а не только непосредственно нижележащего.
Для того, чтобы при работе с элементами нижнего уровня можно было
делать что-то осмысленное с верхнего уровня должен быть виден контекст,
то есть связи между элементами объектных моделей разных уровней должны быть двухсторонними.