Советы для нескольких версий в одном приложении - PullRequest
0 голосов
/ 15 января 2019

У нас есть одностраничное приложение (AngularJS, Asp.net Web API, MVC, на IIS) с уникальным требованием: когда мы добавляем новые функции и исправляем ошибки, все существующие пользовательские проекты в приложении не могут быть затронуты и нуждаются чтобы иметь возможность продолжать работать так, как они делают для этой версии, как будто изменения не произошли. Приложение получает данные от пользователя через сотни полей ввода и выполняет моделирование усложнения, чтобы вычислить результаты для отображения пользователю. В настоящее время, когда мы обновляем приложение, мы дублируем часть кода, чтобы гарантировать, что новая версия полностью отделена. Я сосредотачиваюсь на стороне пользовательского интерфейса, поэтому, например, если мы добавим новый ввод, этот ввод не появится для новой версии. Другим примером может быть изменение способа обработки / интерпретации существующего ввода.

В дальнейшем мы хотим прекратить дублирование такого большого количества кода, чтобы в случае изменения структуры или угрозы безопасности мы могли исправить ее в одном наборе кода вместо всех этих дубликатов. Мой вопрос, как сделать это чисто? В моей голове я визуализирую тонны утверждений IF или SWITCH везде, где версия отличается от предыдущей. Angular хорошо подходит для динамического интерфейса, но у нас, как правило, 2-4 новых версии в год, поэтому через 2 года это уже 8 версий. Таким образом, у меня могут быть входные данные с ng-if = "version == 3.41" повсюду, которые запутываются, и функции, которые разбиваются на операторы case по всему. Кажется, что это кошмар, чтобы поддерживать чистоту, поддерживать, и чтобы другие разработчики понимали, что код делает в любой данной версии.

Итак, я ищу советы или ссылки на руководства для чего-то вроде этого. Как я могу четко разделить мой код на C # и JavaScript таким образом, чтобы ничего не дублировалось, оставалось единым веб-сайтом и было понятно? Во многом так же, как шаблон фабрики дает вам интерфейс для извлечения нескольких версий класса, я чувствую, что есть аналогичный способ создания кода, чтобы я мог сортировать извлечение или инкапсуляцию определенной версии кода.

...