Использование функции переключения функций и IoC вместо кода ветвления - хорошая или плохая идея? - PullRequest
10 голосов
/ 22 марта 2012

Наши клиенты могут выбирать, когда обновляться.Итак, моя команда буквально должна поддерживать и поддерживать десятки версий нашего программного продукта.Как вы можете себе представить, это приводит к большому количеству ветвлений и слияний, поскольку во всех этих разновидностях необходимо распространять исправления и пакеты обновлений.Я не доволен ситуацией.Очевидное решение - просто не поддерживать столько разных версий нашего продукта, но это очевидное решение мне недоступно.Итак, я изучаю творческие возможности, чтобы снизить объем работ по обслуживанию команды.Я рассматриваю возможность использования сочетания Feature Toggling и IoC для реализации n-ти версий нашего программного продукта.Идея состоит в том, чтобы я мог использовать единую кодовую базу для своего продукта и управлять поведением и функциями через управление конфигурацией.Это было бы вместо того, чтобы распространять код по нескольким ветвям.Это разумный подход или я просто заменяю одну проблему на другую?

1 Ответ

3 голосов
/ 01 февраля 2016

Это звучит разумно, поскольку именно так я бы решил эту проблему в среде с нуля.

Хотя давайте не будем называть это Переключением функций .Как следует из названия, Feature Toggle - это переключатель on / off , который может быть не тем, что вам нужно.

Иногда обновление также включает изменено поведение в существующих функциях.Это означает, что вам, вероятно, понадобится что-то более сложное, чем переключатель on / off .

Шаблон стратегии - это более гибкий способ моделирования изменений вповедение.Каждая Стратегия может представлять определенную версию определенного поведения, и если вы вообще не хотите этого поведения, вы можете предоставить реализацию Null Object .Другими словами, Feature Toggle может быть реализован со Стратегией.

Вы можете внедрить Стратегии в ядро ​​вашего приложения, используя Dependency Injection, и вы можете сделать выбор Стратегий настраиваемым через систему конфигурации.Большинство DI-контейнеров, о которых я слышал (в .NET и Java), поддерживают конфигурацию на основе файлов.

Это, по сути, описывает архитектуру надстройки .

Теперь,даже для нового приложения это нелегко сделать.Если у вас безголовая система, это не , что сложно, но как только вы включили пользовательский интерфейс, вы начинаете понимать, что вам также понадобится компонентизировать архитектуру пользовательского интерфейса, чтобы вы могли подключитьЭлементы пользовательского интерфейса с помощью стратегий.

На основе десятилетней базы кода это было бы то, что я бы назвал «интересным испытанием», если не сказать больше.

...