Controle de versão

Seguinte: temos uma aplicação web que desenvolvemos pra uma empresa e continuamos o desenvolvimento adicionando novas funcionalidades eternamente. Agora essa mesma aplicação vai ser usada por outra empresa e também vamos desenvolver novas funcionalidades especificas pra essa empresa. A questão é: qual a melhor forma de controlar as versões? Tem coisas que vão ser comuns pras duas empresas, e outras que vão ser específicas pra cada uma.

Já usamos CVS, mas como organizar isso?

:arrow: Cria uma módulo pra cada empresa e pronto?
:arrow: Cria um móculo com a “aplicação base” e outros dois pra cada empresa extendendo essa aplicação (não sei como eu faria isso)?
:arrow: Cria um branch pra cada empresa?
:arrow: Faz uma aplicação só e restringe o acesso por permissão de usuários e vários ifs?

Obs: cada empresa tem seu ambiente de produção, elas não vão acessar o mesmo servidor.

[]'s

Rodrigo C. A.

Existem diversos padrões e problemas quanto a isso.

Utilizar uma base de código para cada impresa, fazendo itnegrações em código fonte, é uma péssima idéia, um ano vivie sse inferno.

Você pode criar uma aplicação altamente modular, e fazer com que o release de um cliente seja apenas um conjunto de módulos.

Bom texto:

Quais padrões?

Eu adoraria fazer isso. Mas até hoje não encontrei uma maneira decente de fazer isso numa aplicação web. Onde colocar os jars, os JSPs, templates e etc de cada módulo sem ter que misturar os módulos?

[]'s

Rodrigo C. A.

Se são funcionalidades específicas (que não fazem parte da aplicação como um todo) não tem porque ficar na aplicação genérica. Modularize a aplicação e adicione esses novos módulos conforme o necessário.

Na verdade, é possível que todas as aplicações tenham “todas” as funcionalidades, basta desenvolver um mecanismo de ativação/desativação delas (talvez uma simples configuração ou mapeamento possa ser utilizada).

Outra coisa, nada de .jar no SCM, use o Maven pra lidar com isso: http://maven.apache.org/

Use o Maven pra gerenciar todo o projeto :mrgreen:

Quite simple:

POJO: regra de negócio
DAO: Acesso a dados, pode ser customizado pelo cliente (aquelas convenções bizarras de nomenclatura)
JSP: Só a skin do cliente

Separe seus POJOs em componentes organizados pela funcionalidade, misture o uso de interfaces para uma camada se comunicar com a outra, bata com algumas factories ou um container IoC. Misture possibilidade de escrever scripts em Groovy a gosto.

Parece brincadeira (e é :slight_smile: ) mas a idéia é essa. Coloque suas regras de negócio em componentes formados por POJOs e considere o usod e um container IoC.