Olá pessoal! Tenho visto muitos livros e cursos sobre Java para Web pois minha intenção é criar um mega sistema neste formato. Eu já trabalho com desenvolvimento de um ERP na plataforma desktop e agora estou querendo portar esse ERP para WEB. O sistema é realmente complexo e completo, so pra você ter uma idéia existem telas em que mas de 10 tabelas/views são usadas para fazer algo como uma venda. O que tenho visto muito por ai são exemplos simples de CRUD em que não se fala sobre como tratar várias classes relacionadas etc. Estava estudando sobre o framework JSF e vi o trabalho que dá para criar uma simples tela de cadastro de usuários. Então a pergunta é qual seria o meio mais produtivo para se criar um sistema desse (ERP) em Java ? Sem modismos, pensando principalmente no usuário e que este usuário pode querer usar Linux, windows, etc ou até mesmo um IPAD… Pessoal por favor, sem puxar sardinha para uma plataforma ou outra, simplesmente técnica e fatos.
Contrate pessoas capacitadas e use metodologia Agil…
Se você investir pouco vai acabar tendo mais dor de cabeça do que solução. Como o FernandoFranzini disse, pessoas capacitadas fazem a diferença mas costumam ser mais caras.
Você comentou sobre JSF, mas se não tiver quem realmente entenda dele na equipe seu projeto pode virar um caos. Ele é fácil de se começar algo e manter um projeto simples, para algo complexo programadores inexperientes podem fazer códigos horrendos para coisas simples.
Crie uma prova de conceito com diversos frameworks e veja o que melhor te atende. Cuidado com frameworks novos ou desconhecidos em sua região de trabalho, pode ser muito difícil de encontrar treinamento e/ou profissionais para trabalhar no projeto.
Olhe também algum framework ActionBased (SpringMVC, Struts) com algum framework em Javascript (Angular, Backbone). A vantagem dessa abordagem é poder separar equipes/tarefas entre equipe de front end e back end.
Antes de mais nada, reveja se a modelagem do sistema está adequada. 10 tabelas em uma tela? Se isso estiver indo ao banco o tempo todo, talvez seja uma boa abordagem utilizar cache ou remodelar sua persistência. Ao mudar para Web isso poderá ser um gargalo no projeto.
A equipe é pequena mas é muito produtiva. Nossos sitemas atuais são feitos em Delphi. Eu tenho bastante conhecimento em Java mas esta relacionado mas a Desktop e alguns servlets, além de conhecimentos de TCP/IP (fiz um programa tipo VNC em java). Na opnião de você qual seria a tecnologia mais produtiva e facil de manter e que de preferencia use o Netbeans (questão de preferencia mesmo) ?
Desde já agradeço pelas respostas!
[quote=vinians]A equipe é pequena mas é muito produtiva. Nossos sitemas atuais são feitos em Delphi. Eu tenho bastante conhecimento em Java mas esta relacionado mas a Desktop e alguns servlets, além de conhecimentos de TCP/IP (fiz um programa tipo VNC em java). Na opnião de você qual seria a tecnologia mais produtiva e facil de manter e que de preferencia use o Netbeans (questão de preferencia mesmo) ?
Desde já agradeço pelas respostas![/quote]
Por favor, não me entenda errado, mas só de você falar tecnologia produtiva e fácil que use Netbeans já soa estranho.
Nada contra a IDE, mas um framework deve ser produtivo acima da IDE. Você deve saber utilizar o framework e entender seu funcionamento sem depender da IDE. Eu digo isso pois já vi diversas pessoas não sabendo resolver coisas bobas por não saber para que servia o faces-config.xml ou o persistence.xml, que são arquivos básicos para o JSF e o JPA respectivamente.
Eu poderia listar diversos frameworks aqui, mas o correto mesmo é: analisar sua necessidade, levantar requisitos funcionais e não funcionais e só depois decidir o que usar. Eu acho muito errado sempre usar o mesmo “kit de framework” para todo e qualquer problema. Um framework nunca deve estar acima dos requisitos do sistema.
Infelizmente eu prefiro não dizer “ei, use o framework x com o servidor y”, pois essa combinação foi ideal para um problema. Eu te indicando algo antes de conhecer sua necessidade poderia ser o maior fiasco para seu projeto, e você me odiaria com todas as suas forças me desejando unhas encravadas até o final da minha vida. [=
-
A melhor tecnologia vai depender do que sua equipe está mais confortável em usar. Não tem sentido esperar que um desconhecido num fórum vai saber qual a melhor ferramenta para o seu caso específico.
-
Sua intenção deve ser sempre criar sistemas simples e focados. Sistema grande e complexo é mais difícil de manter e é geralmente resultado de equipe com pouca experiência e/ou processo desorganizado.
[quote=Impossivel]1) A melhor tecnologia vai depender do que sua equipe está mais confortável em usar. Não tem sentido esperar que um desconhecido num fórum vai saber qual a melhor ferramenta para o seu caso específico.
- Sua intenção deve ser sempre criar sistemas simples e focados. Sistema grande e complexo é mais difícil de manter e é geralmente resultado de equipe com pouca experiência e/ou processo desorganizado.[/quote]
Exatamente.
vinians,
Você deverá fazer um estudo para dividir o “sistema complexo” em sistemas menores atendendo de forma mais otimizada cada gerência ou processo.
Sobre tecnologia, concordo com o que todos falaram aqui. Sua questão precisa estar mais madura, já experimentando as opções faladas pelo menos.
[quote=vinians]A equipe é pequena mas é muito produtiva. Nossos sitemas atuais são feitos em Delphi. Eu tenho bastante conhecimento em Java mas esta relacionado mas a Desktop e alguns servlets, além de conhecimentos de TCP/IP (fiz um programa tipo VNC em java). Na opnião de você qual seria a tecnologia mais produtiva e facil de manter e que de preferencia use o Netbeans (questão de preferencia mesmo) ?
Desde já agradeço pelas respostas![/quote]
Uma equipe produtiva em uma linguagem pode não ser em outra. A curva de aprendizagem pode não ser boa, principalmente se o desenvolvedor não conhecer outras linguagens ou estar desenvolvendo em Delphi por muito tempo.
Obrigado pessoal, mas as respostas foram muito subjetivas. Creio que esse é um problema de bolha, ou seja, as pessoas dão respostas padrão, para perguntas como esta, não querem arriscar sugerir um conjunto de ferramentas com medo de serem rejeitadas por suas respostas. Estou respondendo em conjunto pois todas as respostas circularam em torno do mesmo pivô. Vocês disseram que seria preciso saber qual o tipo de sistema que pretendo construir, mas na minha pergunta eu especifiquei bem ser um ERP. Essa questão de dizer que a pessoa vai escolher uma ferramente para cada projeto é muito interessante na teoria mas na prática não funciona assim. Geralmente a empresa adota um tipo de framework como por exemplo Java ou .NET a trabalha nele com seus projetos, a não ser empresas muito grandes, que não vem ao caso aqui. E quanto ao fato da IDE não ter “nada a ver” isso é outra coisa que só é bom pra se dizer na teoria sendo que a escolha de uma boa IDE com todos os seus atributos e code completion, criação de interfaces, criação automática de scripts ANT etc etc, definitivamente eu não vejo a logica de se criar um sistema como um ERP usando o bloco de notas e o javac diretamente na linha de comando.
A única coisa que eu preciso saber é sobre um conjunto de tecnologias dentro do JAVA que seja mais cabivel e produtiva para este tipo de sistema, ou seja um sistema realmente GRANDE com muitas telas, muitas tabelas, muitas regras de negócios, ou seja algo não tão trivial assim como um simples CRUD. E quanto ao fato de alguem achar que 10 tabelas em uma tela é muito, provavelmente nunca trabalhou na criação de um ERP ou algo do gênero.
[quote=vinians]A equipe é pequena mas é muito produtiva. Nossos sitemas atuais são feitos em Delphi. Eu tenho bastante conhecimento em Java mas esta relacionado mas a Desktop e alguns servlets, além de conhecimentos de TCP/IP (fiz um programa tipo VNC em java). Na opnião de você qual seria a tecnologia mais produtiva e facil de manter e que de preferencia use o Netbeans (questão de preferencia mesmo) ?
Desde já agradeço pelas respostas![/quote]
Vocês deverão se desprender da cultura frontend desktop. Você ter citado JSF já é um mal indício de ainda estar na cultura desktop. Seja lá o que for sobre questões de frameworks, em relação a front end vocês devem começar pela base HTML, JavaScript, CSS. Depois podem avaliar frameworks UI como Bootstrap, framework JS como AngularjS e frameworks web server como ja falado Spring MVC ou outros similares.
vinians,
eu praticamente só trabalhei com ERPs na minha vida profissional, então me sinto habilitado para indicar alguns caminhos:
-
Como você já sabe, ERPs são sistemas grandes, portanto, você precisará de uma infra-estrutura “parruda” para aguentar o tranco. Mesmo que a imigração ocorra aos poucos, algumas decisões tem de ser tomadas de antemão, entre elas, qual será o servidor de aplicação utilizado. Nesse caso, minha sugestão é partir diretamente para um servidor JEE full-compliant, como o JBoss ou o Glassfish. Eu escolheria o JBoss. Entre outros motivos, ele já vem com o Hibernate.
-
Outro ponto fundamental é adotar um bom framework de persistência. Como eu mencionei, adotando o servidor JBoss, o Hibernate já vem junto. Mas é interessante manter suas implementações dependentes apenas do JPA. Ainda no backend, junto com o JBoss você dispõe também de EJB’s e filas JMS, provavelmente nas versões mais atuais do JBoss você já deve dispor de CDI também.
-
Para a construção de interface, e é nesse ponto que você deve estar mais interessado, com certeza você ganhará mais se adotar algum framework RIA. Frameworks desse tipo trazem uma interface mais pronta e componentes mais poderosos (grid, árvores, painéis, etc.). Eu não testei ainda, mas eu sugiro Play Framework ou Vaadin.
Acho engraçado como no mundo de hoje, as pessoas acham que aplicar conhecimento de Engenharia de Software em um requisito é bobeira, é medo ou seja lá o que for… Realmente é melhor pegar minha Pós Graduação e jogar no lixo, pois hoje eu vi que na verdade sou medroso…
ERP não é uma palavra mágica que define tudo. Quantas pessoas vão usar? Quais requisitos de segurança? Disponibilidade? Qual o ambiente que vai rodar seu projeto? Haverá load balance? Se sim com Round-Robin ou Sticky Session? Multi Tenant?
Bem, depois me passe a origem de que as letras ERP já especificam todos os requisitos que listei acima… (OBS.: essa lista que falei acima, poderia aumentar muito mais…)
Entenda que existe uma diferença entre Framework e Plataforma de desenvolvimento… Framework a gente fala de Spring, JSF, JPA, EJB e assim vai, plataforma se trata de de .NET e Java e uma plataforma faz todo sentindo em uma empresa abraçar e seguir em frente.
[/quote]Pelo visto você não entendeu o que eu disse… deixe-me falar de um modo mais leigo então: “Você deve conhecer o que um framework faz pela sua necessidade mais do que a IDE. Um framework errado com a IDE correta pode ferrar seu projeto inteiro”. OBS.: Pesquise sobre Maven ao invés de ANT
Creio que o que você quer é uma sopa de letras… alguém te dará nesse post…
[quote=vinians] E quanto ao fato de alguem achar que 10 tabelas em uma tela é muito, provavelmente nunca trabalhou na criação de um ERP ou algo do gênero. [/quote] Ou pelo visto alguém não trabalhou com Web para entender o motivo do que eu falei… Web seu fluxo vai todo para o servidor antes de ir para o banco de dados. Se você ficar fazendo 10 acessos na tela e multiplicar isso por… sei lá… 15 usuários por segundo… Ah, deixa para lá… Algum dos frameworks citados aqui tratará isso…
Bem… desculpe pelo meu medo em não te dar uma sopa de letrinhas ou qualquer outra coisa que você esperava. Infelizmente eu prezo demais por todo estudo que já fiz até hoje para simplesmente fazer algo que vá contra tudo que eu aprendi com a experiência de terceiros.
É claro que são respostas subjetivas. Você pôs uma pergunta subjetiva, logo, a resposta acaba sendo subjetiva também. (Alta produtividade não é alcançada com receitas de bolo e depende muito da equipe e da abordagem técnica escolhida.)
E não fique julgando respostas com argumentos lamentáveis, o do bloco de notas foi triste. Você praticamente ridicularizou as colocações do Hebert (que foram muito pertinentes, por sinal).
[quote=Ataxexe]É claro que são respostas subjetivas. Você pôs uma pergunta subjetiva, logo, a resposta acaba sendo subjetiva também. (Alta produtividade não é alcançada com receitas de bolo e depende muito da equipe e da abordagem técnica escolhida.)
E não fique julgando respostas com argumentos lamentáveis, o do bloco de notas foi triste. Você praticamente ridicularizou as colocações do Hebert (que foram muito pertinentes, por sinal).[/quote]
- 1
Nem tinha visto essa resposta dele, concordo que foi lamentável.
[quote=vinians]Obrigado pessoal, mas as respostas foram muito subjetivas. Creio que esse é um problema de bolha, ou seja, as pessoas dão respostas padrão, para perguntas como esta, não querem arriscar sugerir um conjunto de ferramentas com medo de serem rejeitadas por suas respostas. Estou respondendo em conjunto pois todas as respostas circularam em torno do mesmo pivô. Vocês disseram que seria preciso saber qual o tipo de sistema que pretendo construir, mas na minha pergunta eu especifiquei bem ser um ERP. Essa questão de dizer que a pessoa vai escolher uma ferramente para cada projeto é muito interessante na teoria mas na prática não funciona assim. Geralmente a empresa adota um tipo de framework como por exemplo Java ou .NET a trabalha nele com seus projetos, a não ser empresas muito grandes, que não vem ao caso aqui. E quanto ao fato da IDE não ter “nada a ver” isso é outra coisa que só é bom pra se dizer na teoria sendo que a escolha de uma boa IDE com todos os seus atributos e code completion, criação de interfaces, criação automática de scripts ANT etc etc, definitivamente eu não vejo a logica de se criar um sistema como um ERP usando o bloco de notas e o javac diretamente na linha de comando.
A única coisa que eu preciso saber é sobre um conjunto de tecnologias dentro do JAVA que seja mais cabivel e produtiva para este tipo de sistema, ou seja um sistema realmente GRANDE com muitas telas, muitas tabelas, muitas regras de negócios, ou seja algo não tão trivial assim como um simples CRUD. E quanto ao fato de alguem achar que 10 tabelas em uma tela é muito, provavelmente nunca trabalhou na criação de um ERP ou algo do gênero. [/quote]
Antes de tudo você precisa ter uma postura menos arrogante para conseguir mais apoio.
Cara escolher tecnologias não é algo tão simples a ponto de você entra em um fórum e perguntar, é legal pra ter uma referência mas você só vai saber realmente o que escolher depois que pegar elas pra ver como é na prática, nem que seja fazendo mini projetos de testes.
Vou dar um exemplo de algo que eu sofro todos os dias, existe uma coisa chamada XSLT, em resumo transforma xml em html com css e tudo mais… isso é lindo até você colocar regra de negócio nele, nele existem funções de soma/divisão e tudo mais, coloque regras de negócio la e você vai ter uma dor de cabeça do kralho com relação a divergência de valores e tudo mais…
Em resumo, como já falaram ai, você pode ter as melhores tecnologias do mundo mas sem profissionais capacitados a probabilidade de dar merda é de 200%.
[quote=rmendes08]vinians,
eu praticamente só trabalhei com ERPs na minha vida profissional, então me sinto habilitado para indicar alguns caminhos:
-
Como você já sabe, ERPs são sistemas grandes, portanto, você precisará de uma infra-estrutura “parruda” para aguentar o tranco. Mesmo que a imigração ocorra aos poucos, algumas decisões tem de ser tomadas de antemão, entre elas, qual será o servidor de aplicação utilizado. Nesse caso, minha sugestão é partir diretamente para um servidor JEE full-compliant, como o JBoss ou o Glassfish. Eu escolheria o JBoss. Entre outros motivos, ele já vem com o Hibernate.
-
Outro ponto fundamental é adotar um bom framework de persistência. Como eu mencionei, adotando o servidor JBoss, o Hibernate já vem junto. Mas é interessante manter suas implementações dependentes apenas do JPA. Ainda no backend, junto com o JBoss você dispõe também de EJB’s e filas JMS, provavelmente nas versões mais atuais do JBoss você já deve dispor de CDI também.
-
Para a construção de interface, e é nesse ponto que você deve estar mais interessado, com certeza você ganhará mais se adotar algum framework RIA. Frameworks desse tipo trazem uma interface mais pronta e componentes mais poderosos (grid, árvores, painéis, etc.). Eu não testei ainda, mas eu sugiro Play Framework ou Vaadin.
[/quote]
Opa, bem interessante sua colocação, estou fazendo alguns testes aqui com JSF usando Tomcat como server e tem funcionado bem, o meu maior problema realmente é o trabalho que dá pra fazer toda a preparação das classes usando a metodologia MVC, realmente fica tudo separadinho direitinho a interface, o acesso ao banco de dados, mas é bem trabalhoso montar toda essa estrutura… Só estou tentando achar algo mais prático. Já ouvi falar no Play para ser usado no lugar do JSF mas não o conheço ainda, vou dar uma pesquisada nisso. Ha, ja usei o GlassFish para um pequeno sistema que fiz para restaurantes, ele rodava os servlets e eu acessava o sistema no IPad e deu certinho, mas era algo bem simples, achei bem facil de instalar os Servlets, talvez eu opte por ele ao invez do Tomcat.
Obrigadão!
Concordo! Arrogância é sempre ruim mesmo! Não foi realmente a intenção! Mas também acho que eu não ficaria onfendido em responder uma pergunta tida como “boba” ou “sem nexo” ou “seja la o que for” porque eu tenho N faculdades X mestrados e Y graduações em Harvard, se eu errei, e eu concordo com isso, não foi eu sozinho.
E só pra constar sobre o .Net
Fonte: Wikipedia, sim é um framework.
Eu hesitei para responder esse tópico porque o número de sugestões e idéias que pensei em dar era imenso.
Concordo e discordo de tantos pontos que se for comentar um a um, vira um livro.
A melhor sugestão que pensei dentre todas é que você contrate uma boa consultoria para isso.
Nem precisa ser para o projeto inteiro, mas pelo menos para a inception do projeto ou um MVP.
Por que acho que isso te ajudaria:
- Trabalharia em conjunto com pessoas com experiência em desenvolvimento web, que pode ser um inferno para desenvolvedores acostumados com desenvolvimento desktop (falo por experiência própria)
- Teria uma visão mais ampla de tecnologias viáveis para essa produtividade que deseja (as vezes vale a pena olhar fora do mundo java/net).
- Pode ainda aprender sobre metodologias ágeis que podem cair como uma luva nessa idéia de rescrever sistemas do zero.
Coisas a se manter em mente:
- Contrate uma consultoria boa, com gente respeitável. Não vá pelo marketing da empresa em si, procure saber como ela é vista na comunidade.
Eu morro de ri com esses analistas que acham que serão salvos por framework se IDEs.
Acho que o Herbert falou algo que realmente vai lhe ajudar: fazer prova de conceito. Vai valer a pena.
se vc já tem isso pronto na forma de app descktop e com esse alto grau de relacionamentos, dificilmente vai encontrar um framework x ou y perfeito pra isso. Terá que resecrever o codigo caso utilize hibernate. Talvez vc nem precise refazer o que ficaria no back-end, pois se sua lógica de negócia já deve estar pronta a nivel de servidor, necessitaria apenas alterar o que ficaria no front-end.
Bom, se quer que funcione no máximo de pcs e mobiles possíveis, sugiro dar uma olhada neste fonte para fornt-end onde falo um pouco de javascript, jquery e bootstrap:
Esta é a forma como tenho desenvolvido meus front-ends atualmente.
Basicamente o que irá mudar da sua aplicação desktop é o front-end. Se puder manter o que ficaria no servidor, acho que teria menos problemas para a sua melhoria.
Aqui eu apresento minhas motivações de desenvolver desta forma acima citada:
Bom, como vc disse que a sua aplicação é delphi (estou cento?), então deve conhecer o modelo de desenvolvimento lista mestre detalhe. Se sim, isso aqui pode te ser ineressante:
Alguns chegaram a falar que é semelhante ao delphi.
Esse codigo é um pouco antigo. Fiz ele antes de conhecer o bootstrap. Sugiro que se interessar pelo fonte, implementar o bootstrap nele da forma como mostrei no primeiro link, assim não será pego de surpresa diantes das diferencas de aparelhos.
Se conseguir separar bem as camadas de sua aplicação, não vai precisar perder tempo refazendo toda a sua aplicação. Apenas modificando-a pra funcionar com o novo fornt-end.
Bom, esta é minha sugestão. Como lhe foi dito, não existe bala de prata.
A palavra chave que eu usei neste caso é desacoplamento.
Sucesso!