Как мне поставить «белую метку» на мое приложение ASP.Net MVC?
-
16-09-2019 - |
Вопрос
У меня есть "белая маркировка"приложение, установленное на серверах нескольких клиентов.В любой конкретной установке различия будут включать в себя контент, таблицы стилей и графику, а также некоторый фактический код/бизнес-логику.Я хочу, чтобы мой TFS-сервер автоматически создавал все варианты моего приложения.Какие у меня есть варианты сделать это?напримердолжен ли я использовать темы?А как насчет флагов условной компиляции #if?
P.S.Вопрос не в том, как настроить Build Server — я это уже сделал.
Решение
Что касается бизнес-логики, я бы выделил различия в отдельные библиотеки, а затем вы могли бы использовать шаблон IoC/DI или шаблон поставщика для разрешения правильной бизнес-логики во время выполнения.
Что касается содержания, я бы рассмотрел темы.По сути, вы можете заставить свой сервер сборки собрать весь код один раз, а затем, когда вы упаковываете код, вы выбираете, какие сборки вам нужны, и используете соответствующую конфигурацию, а также выбираете подходящую папку темы для имеющегося клиента.
Мне не нравится использовать # директивы в этом случае.Если подумать, ваши модульные тесты придется запускать для каждого имеющегося у вас условия.Если вы удалите условные выражения и абстрагируете различия, ваши модульные тесты можно будет запускать сразу на всех подключаемых сборках.
Другие советы
- Контент/изображение — вы можете создать свое собственное расширение HtmlHelper/UrlHelper, чтобы выполнять Html\Url.Content(), чтобы подбирать нужные вещи для нужных клиентов, а также копировать необходимые файлы из нужных папок (что просто, /Content + /ContentCustomer1, 2, ...).
- Полагаю, однозначного ответа не существует.Одним из простых ответов было бы переместить ваш метод Order.Calculate() в частичный класс, чтобы у вас было
- Ордерпартсфоркустомер1.cs
- Ордерпартсфоркустомер2.cs
где у тебя будет
public partial class Order
{
public Money Calculate()
{
}
}
Тогда вы просто добавите необходимые классы .cs и не загромождаете свой код #ifs.
Если вам нужен общий код для всех и переопределения только для конкретных клиентов, вы можете иметь OrderPartsCommon.cs, который вы будете копировать/использовать, если нет переопределения для конкретного клиента.