Pergunta

Eu tenho um "branco rotulado"Aplicativo instalado nos servidores de vários clientes. Em qualquer instalação, as diferenças incluem conteúdo, folhas de estilo e gráficos, mas também alguma lógica real de código / negócio. Quero que meu servidor TFS construa todos os sabores automaticamente do meu aplicativo. O que são Minhas opções para fazer isso? Por exemplo, devo usar temas? E os sinalizadores de compilação condicional #IF.

PS A questão não é sobre como configurar o servidor de construção - já fiz isso.

Foi útil?

Solução

Para a lógica de negócios, eu abstrava as diferenças em bibliotecas separadas e, em seguida, você pode usar um padrão de IOC / DI ou padrão de provedor para resolver a lógica de negócios correta em tempo de execução.

Quanto ao conteúdo, examinaria os temas. Essencialmente, você pode fazer com que seu servidor de compilação crie todo o código uma vez e, ao empacotar o código, escolhe quais conjuntos você precisa e usar a configuração apropriada e escolher a pasta de temas aprovados para o cliente em questão.

Não gosto de usar as diretivas # neste caso. Se você pensar bem, seus testes de unidade teriam que executar para cada condicional que você tem. Se você remover os condicionais e abstrair as diferenças que seus testes de unidade podem ser executados em todos os conjuntos flugable de uma só vez.

Outras dicas

  1. Conteúdo /imagem - Você pode fazer sua própria extensão HtmlHelper /Urlhelper para fazer html url.content () para capturar coisas certas para clientes certos, além de copiar os arquivos necessários das pastas corretas (que é simples, /content + /contentCustomer1, 2, ...).
  2. Não há resposta única, suponho. Uma resposta fácil seria mover seu pedido.calculate () método para uma classe parcial, para que você tenha
    • OrderPartsForCustomer1.cs
    • OrderPartsForCustomer2.Cs

onde você terá

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

Você apenas incluirá as classes .CS necessárias e não confunde seu código com #ifs.

Se você deseja um código comum para todos e substitui apenas para clientes específicos, você pode ter OrderPartScommon.cs, que você copiará/usará se não houver um excesso específico do cliente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top