Como manter uma versão demo de um aplicativo?

8

Preciso demonstrar nosso aplicativo de produção para clientes em potencial. A maneira como eu a configurei hoje é simples. O aplicativo de demonstração é uma duplicata exata do sistema de produção, exceto que os dados no banco de dados são ofuscados para proteger os dados de nossos clientes atuais. Isso funciona muito bem porque não requer nenhuma alteração de aplicativo.

Boss lançou hoje um potencial BOMBSHELL e disse que o sistema de demonstração precisa conter um link especial e que APENAS aparece na demonstração. Ele continuou explicando que, no futuro, pode haver diferenças muito maiores entre os aplicativos de demonstração e de produção (por exemplo, uma área inteira de funcionalidade). O que eu faço agora?

Algumas coisas que pensei em fazer:

  • Manter um ramo diferente no subversion específico para o sistema de demonstração
  • Crie um pacote de instalação que possua as alterações para demonstração, depois reverta e construa um pacote de instalação de produção
  • Modularize o aplicativo (não faço ideia de como)
  • Diga: "Dane-se! Eu não farei isso!" (RI MUITO)
  • Use algum tipo de lógica condicional no aplicativo para determinar se é um aplicativo de demonstração ou de produção. Por exemplo (se o URL contiver 'demo', mostre mais hide).

Se você ainda não adivinhou, este é um aplicativo da web

De qualquer forma, não tenho experiência nesse cenário sobre qual é o melhor ou se nada disso é bom. Alguém tem uma resposta, estratégia, alguma coisa !?

OO
fonte
Não ramifique o código sobre isso se puder ajudá-lo. Não tenha uma instalação separada se puder ajudá-la. Não coloque "demo" no URL - isso fará com que o produto pareça falso. Você deve poder torná-lo um parâmetro de configuração. Idealmente, você não terá instruções se verificar a configuração em todo o seu código, talvez uma chamada para ver se um recurso é suportado e apenas o objeto implementado que sabe o porquê - depende do seu aplicativo.
psr

Respostas:

3
  • Manter um ramo diferente no subversion específico para o sistema de demonstração

    • Sim! Isso ajuda verdadeiramente. Mas tenha cuidado em como você faz isso. O melhor é que, quando o sistema principal evoluir, você deve saber como reduzir suas alterações o mais próximo possível.
  • Crie um pacote de instalação que possua as alterações para demonstração, depois reverta e construa um pacote de instalação de produção

    • Isso pode funcionar - mas se você estiver fazendo muitas demos - você perderá sua boa parte da vida nisso.
  • Modularize o aplicativo (não faço ideia de como)
    • Esta é a melhor resposta. Ver abaixo.
  • Diga: "Dane-se! Eu não farei isso!" (RI MUITO)
    • Definitivamente não! Não porque você deveria ter medo. Mas um bom engenheiro não desiste de desafios.
  • Use algum tipo de lógica condicional no aplicativo para determinar se é um aplicativo de demonstração ou de produção. Por exemplo (se o URL contiver 'demo', então mostre mais hide).
    • Definitivamente não! Isso tornaria seu produto muito fraco ao longo do tempo.

Quando você pensa em um produto Demo (a menos que esteja falando de versões de trilha) - não pense como um 'produto separado', mas pense nele como um 'ambiente separado'. Se você e eu instalarmos o mecanismo word-press em nossos respectivos sites, teremos o mesmo produto, mas com dados diferentes. Você deve arquitetar seu produto para que coisas específicas da instalação (e uso) - possam ser criadas, como se cria fontes de conteúdo diferentes. Da mesma forma, por exemplo - você está criando um aplicativo .Net ou JAVA nativo, a funcionalidade permanece a mesma - mas de onde vem os recursos visuais (incluindo telas de apresentação e botões) podem ser pastas diferentes para mostrá-los de forma diferente. Mais tarde - a demanda chegará a alterar os layouts - é quando você sabe que precisa de mais itens de modelo!

Não pule para a modularização de uma só vez. Quando e quando o requisito chegar, comece primeiro um ramo separado (linha de desenvolvimento) e faça a demonstração! (Como todas as demos são normalmente no dia seguinte às 10:30 da manhã). O desvio que você criou agora informa o que modularizado deveria ter sido obtido a partir de recursos externos. Aplique isso e junte-o na próxima vez que a mesma demonstração fosse sua versão padrão (com URL diferente).

Quase sempre, se você acabar criando "produto separado" como demonstração - está convidando problemas, dores ou ambos!

Dipan.

Dipan Mehta
fonte
Eu realmente gosto da sua resposta. Para uma simples ocultação e exibição de um link, posso fugir com um ramo separado - como você disse.
OO
Discordo de alguns pontos desta resposta. Criar um ramo diferente não é muito diferente de criar um "produto separado", o que você está (corretamente) alertando contra o OP. Um ramo de longo prazo que não é mesclado de volta à linha principal de desenvolvimento não passa de uma cópia que deve ser mantida separadamente. Para evitar isso, existe uma abordagem bem conhecida do uso de alternância de recursos , que significa "lógica condicional no aplicativo" e geralmente é uma solução muito melhor do que abusar de ramificações SVN para isso.
Doc Brown
@ DocBrown - Você não leu a pergunta e a resposta. As quatro opções foram dadas pelo OP e a resposta apenas expõe as implicações. A resposta mostra essa vantagem rápida, bem como as armadilhas de cada uma. enquanto o recurso alterna definitivamente as melhores soluções quando existem várias variantes - a ramificação svn é essencialmente uma saída fácil para uma dessas alterações. Tudo realmente depende da visão de curto e longo prazo do que essas variações são prováveis. E a meu ver, a resposta realmente avalia todas as opções e suas implicações de maneira bastante neutra!
Dipan Mehta
E francamente - o que há de tão ruim nessa resposta que merece -1 voto?
Dipan Mehta
Não há necessidade de me insultar. Meu comentário é exatamente sobre suas implicações. Você escreveu "Manter um ramo diferente no subversion - Sim! ". Minha opinião aqui: " Não , não faça isso, este é um péssimo conselho, já que a demo é provavelmente um recurso de longo prazo". E você escreveu "Use algum tipo de lógica condicional no aplicativo - Definitivamente não! ". Mas isso é totalmente contrário ao uso de alternância de recursos. Se você tiver problemas com o voto negativo, edite sua pergunta e resolva essas contradições, talvez você tenha entendido as coisas de maneira diferente.
Doc Brown
9

A melhor abordagem seria modularizar para que você possa ativar ou desativar itens em qualquer aplicativo.

Sua demonstração é uma instalação de produto, com uma configuração que ativa coisas diferentes do aplicativo de produto real e aponta para um banco de dados diferente.

CaffGeek
fonte
+1 para uma resposta simples a uma solicitação bastante simples de seu chefe.
Dodgy_coder 2/11/11