Как мне поставить «белую метку» на мое приложение ASP.Net MVC?

StackOverflow https://stackoverflow.com/questions/1473636

Вопрос

У меня есть "белая маркировка"приложение, установленное на серверах нескольких клиентов.В любой конкретной установке различия будут включать в себя контент, таблицы стилей и графику, а также некоторый фактический код/бизнес-логику.Я хочу, чтобы мой TFS-сервер автоматически создавал все варианты моего приложения.Какие у меня есть варианты сделать это?напримердолжен ли я использовать темы?А как насчет флагов условной компиляции #if?

P.S.Вопрос не в том, как настроить Build Server — я это уже сделал.

Это было полезно?

Решение

Что касается бизнес-логики, я бы выделил различия в отдельные библиотеки, а затем вы могли бы использовать шаблон IoC/DI или шаблон поставщика для разрешения правильной бизнес-логики во время выполнения.

Что касается содержания, я бы рассмотрел темы.По сути, вы можете заставить свой сервер сборки собрать весь код один раз, а затем, когда вы упаковываете код, вы выбираете, какие сборки вам нужны, и используете соответствующую конфигурацию, а также выбираете подходящую папку темы для имеющегося клиента.

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

Другие советы

  1. Контент/изображение — вы можете создать свое собственное расширение HtmlHelper/UrlHelper, чтобы выполнять Html\Url.Content(), чтобы подбирать нужные вещи для нужных клиентов, а также копировать необходимые файлы из нужных папок (что просто, /Content + /ContentCustomer1, 2, ...).
  2. Полагаю, однозначного ответа не существует.Одним из простых ответов было бы переместить ваш метод Order.Calculate() в частичный класс, чтобы у вас было
    • Ордерпартсфоркустомер1.cs
    • Ордерпартсфоркустомер2.cs

где у тебя будет

public partial class Order
{
   public Money Calculate()
   {
   }
}

Тогда вы просто добавите необходимые классы .cs и не загромождаете свой код #ifs.

Если вам нужен общий код для всех и переопределения только для конкретных клиентов, вы можете иметь OrderPartsCommon.cs, который вы будете копировать/использовать, если нет переопределения для конкретного клиента.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top