DEPENDENCY INJECTION API

Здравствуйте

Хочу поговорит о Dependency Injection(DI). Чтобы сделать инъекцию зависимостей нужно сначала выделить зависимости.

Зависимость в программировании имеет два вида зависимость привязки и функциональная зависимость. Зависимость привязки выражается как более статическая часть чем функциональная зависимость.

Зависимость привязки Dependency InCut является более статичной потому что обычно она задаётся как взаимосвязь указателей на интерфейсы. И выставляется перед началом работы программы. Сами же интерфейсы реализуются в объектах. А объект это API плюс состояние(переменные). Переменные как правило постоянно обрабатываются собираясь в единое целое и расходясь расщепляясь по графу объектов(по набору объектов). Поэтому программируя надо хорошо знать какие переменные где нужны. И это как раз есть ВЫДЕЛЕНИЕ СОСТОЯНИЯ.

За выделением состояния идёт его распаковка по объектам и это ВТОРОЙ ШАГ - ИНКАПСУЛЯЦИЯ.

ТРЕТИЙ ШАГ выделение ВЗАИМОСВЯЗЕЙ. Тут определение какие должны быть стационарности зависимостей - то есть связи которые распределяются в начале программы то есть охранение ссылок на интерфейсы как часть DI. Ещё взаимосвязи это функциональные зависимости (Functional Dependensy(FD)). FD по просту функции которые определяют взаимодействие системы.

Стационарные зависимости зависят от объектов которые инкапсулировали состояние по набору объектов.

ЧЕТВЕРТЫМ ШАГОМ создание FD. Это инкапсуляция по интерфейсам функций то есть API. Причем распределение API на части разложив на ПОД API - интерфейсы от которых наследуются объекты.

Для уменьшения связности то есть для более четкого и минимального инкапсулированния состояния нужно рассмотреть весь API на выделение главных функций и под функций, вместе со стационарными взаимосвязями(ссылки на интерфейсы). Причем, как правило главные функции легко назвать, то под функции имеют сложные названия которые обозначают Часть Алгоритма и Стационарные Взаимосвязи. Так что не скупитесь на длинну названий под функции.

При масштабировании приложения возможно запутывание API - зацикливание вызовов функций. Для решение этой проблемы нужно использовать граф основных вызовов. Пишите в начале функции свой вызов добавление вершины в граф и проверяйте не зацикленность графа. Это может помочь при отладке.