#c #architecture #dependencies
#c #архитектура #зависимости
Вопрос:
У меня есть досадная проблема зависимости между компонентами, и я хотел бы услышать несколько способов ее решения.
В основном у меня есть 3 компонента, которые почти ациклически зависят друг от друга, за исключением небольшой зависимости между первым и последним компонентом. Конкретно, это JIT-компилятор, но, надеюсь, это широко распространенный тип абстрактной зависимости, который может возникнуть при других обстоятельствах.
Компоненты в основном находятся в последовательности зависимости от потока; генерация исходного кода / AST, генерация кода и время выполнения. Как видно из диаграммы, ошибки, генерируемые во время выполнения, должны иметь возможность передавать идентификаторы, которые могут быть сопоставлены с элементами местоположения источника. Сложность заключается в том, что этот идентификатор не обязательно является целочисленным типом (хотя это может быть). До сих SourceItemID
пор это был тип, внутренний для исходного компонента, но теперь кажется, что его нужно определить вне его.
Какие шаблоны были бы оптимальными для использования здесь? Я думал о том, чтобы, возможно, шаблонизировать тип ошибки среды выполнения с желаемым идентификатором местоположения источника.
Ответ №1:
Самое простое решение — определить все типы и общее поведение, используемые вашими модулями, в независимом модуле (возможно, в одном заголовке), который используют все реальные модули обработки.
Для минимальных накладных расходов / головных болей и проблем с совместимостью (эти общие типы могут быть полезны в другом месте в какой-то момент для связи с другими приложениями / плагинами / чем угодно), постарайтесь сохранить эти типы POD, если сможете.
«Шаблонизация» вещей не является тривиальной. Он очень мощный и выразительный, но если вы смотрите на удаление зависимостей, мое мнение таково: попробуйте сначала посмотреть, можете ли вы упростить задачу.