Novo Projeto! Sugestões

Fala turma!

Seguinte, estou iniciando um novo projeto aqui na empresa, trata-se de um software de Gestão Comercial para diversos segmentos e como em todo o início de projeto logo de cara vêm os requisitos, então lá vão eles:

  • Multiplataforma (essa é fácil)
  • Indepêndencia de bancos de dados (essa tb)
  • Rodar tanto em desktop quanto em browser (começou a complicar)
  • Algumas funcionalidades acessarão diretamente o hardware (impressoras, hardlocks, etc…)
  • Interface deve ser ergonômica e intuitiva (eles se espelharam muito em Delphi para definir este requisito)
  • E por último, algumas telas são um tanto cheias de amarrações, pisca-piscas e outros babilaques… então preciso ter total controle do que vou desenvolver.

Pois bem, minhas primeiras pesquisas elegeram o Webwork para a parte que rodará na intranet dos clientes porém ainda tenho dúvidas sobre o desktop; Usar swing ou thinlet eis a questão… Até onde sei o thinlet é muito bom (obrigado), muito leve, muito bonito, muito fácil porém e se eu precisar (vou precisar) daquele campo que vem mascaradinho ou daquela grid que eu possa alterar diretamente os valores nela como fica?
Qto ao swing, já ouvi comentários que houveram melhorias no tiger mas ainda não testei… sei que ele é super robusto e dá pra fazer qq coisa com ele os únicos pontos que pecam são na performance e complexidade para escrever as GUI´s.
Para persistência não precisa nem dizer que é hibernate na cabeça, agora estou preocupado em deixar as coisas muito bem separadas seguindo o bom e velho MVC mas para isso vou ter que implementar 2 controladores distintos correto?
Amigos, está aberta a discussão e espero sair daqui com uma boa diretriz para meu projeto.
Ahhh já pesquisei praticamente todos os tópicos do fórum sobre o assunto e vejo que existem uma infinidade de soluções pré-moldadas pra cada caso porém gostaria que esse projeto fosse um padrão para os demais, ou seja, num sei se é legal ficar garimpando dezenas que frameworks para atenter 1 ou 2 requisitos toda vez que começar algo e também ficar toda hora refatorando códigos EOF neh.

Baita abraço!!!

Tem um pessoal aqui que tava desenvolvendo o JForms… (acho que é esse o nome!). Pelo que sei, ele é um framework que independe se vc está usando ambiente web ou desktop! Me corrijam se eu estiver errado, pois estou chutando, e não conheço a ferramenta, só ouvi falar!

Tem uma arquitetura que eu sugiriria pra vc, mas naum sei se ajudaria. Tem que ver se a galera apoia ou dão uma sugestão melhor!

view --> controle --> façade --> modelo -->persistencia

view --> pode ser swing ou web, tanto faz!

controle --> se preocupa apenas em chamar o façade que contém todas as operações disponíveis do sistema!

façade --> Ele poderia encapsular toda lógica de operações do sistema. Por exemplo, se vc tiver a operação inclui aluno, crie no façada a operação cria aluno que acessa o modelo e realiza a persistência, além de fazer o controle das trazações!

Modelo + persistência vc já sabe!

A jogada ai está no Façade! Assim, se no seu jsp tiver um botão incluiAluno, e no swing também tiver o mesmo botão, é só o controle charmar (nada mais que isso) o método incluialuno que está no façade!

Eu sugiro até que o façade poderia estar distribuido, para ser acessado via RMI, HTTP, sei lá! Ai vc vê o q é melhor pra vc!

Abraços!
Thiago

Humm interessante este modelo…
Realmente me deixa livre pra voar…
o JForms tem algo a ver com o JGoodies ou não? pois me lembro de ter usado o JGoodies em outro projeto apenas para projetar as GUI´s mais tranquilamente (era bacana)!!
Estava dando uma estudada nos exemplos do Thinlet e estou achando fácil demais pra ser verdade… ainda tô com um pouco de medo de arriscar…

Thinlet é BEM fácil mesmo.

O pessoal da Summa (Allan e Michael) criaram o framework Genesis, que trabalha com Thinlet tanto no desktop, quanto no browser (applet).

Thinlet é da hora… mas precisa ver com uns cara que manja mais para ver se vale a pena, pois ele é mais produtivo, no entanto não é tão robusto quanto swing!

Para lidar com clientes exigentes, eu usaria swing, até por que provavelmente surgirão novos requisitos, e eles poder pedir pra vc colorir tabelinhas, arrastar alguma coisa… Para prevenir estes problemas, opte por swing! Swing assim como o Thinlet são ótimas soluções. Esse passo que swing tem performance ruim é balela. Não é uma performance igual c++, vb e etc… mas não é o swing quem deixa o sistema lento, e sim se vc esolher uma péssima arquitetura pro seu sistema e se seu banco for aquela gambiarra!

Swing no projeto… eu faria isso!

Thiago: você usou a frase certa “usuários exigentes” e o pior é que nossos clientes são super mal-acostumados com a arquitetura delphi aí já viu neh… vão querer ver pisca-pisca na tela inteira… É difícil mudar a cultura das pessoas e o pior “dos meus gerentes”… Estou tendendo mais pro swing mesmo. Podemos discutir o modelo de implementação que você propôs?

Daniel: É incrível a agilidade que se tem ao desenvolver usando thinlet porém como disse acima imagina se o diacho do meu gerente ou cliente inventa de por luzes neon na barra de rolagem? hehe
Estive vendo a parte do componente Table e ele usa ama filosofia bem parecida com uma table html neh… mas como faria por exemplo pra mandar o meu modelo preencher essa tabela se ela é declarativa?

Você não rpecisa de dois controllers, precisa é de várias itnerfaces para sua camada de negócios.

Aí é que tá! o Thinlet peca neste quesito. Pq Thinlet não é nada OO. Ele nmão tem esquemas de model.

O certo seria você criar um esquema seu (eu fiz um ThinletUtils em http://java.danieldestro.com.br/codes/FutManager.zip) ou então usar algo pronto, como o Genesis (genesis.dev.java.net).

Daniel, não consegui baixar seu exemplo :frowning:
tá dando que o arquivo não existe…

Arrumei o link.

Num dá dando não… continua não encontrando o arquivo! faz o seguinte: manda no meu e-mail: r.valdomiro@terra.com.br

Thank´s

Acredite, o caminho está correto!

Consegui!
Valew Daniel…

Uma dúvida:
Dá para criar interfaces thinlet via API como o Swing ?

Até onde estudei não :!:
Elas são criadas à partir de estruturas xml, você usará swing apenas para fazer o parse deles :!:

Dá sim:

Object o = Thinlet.create("textfield"); add( o );

Dá uma lida nos artigos publicados na Java Magazine (21 e 22).

Olá!

Eu andei brincando com thinlet nestes últimos dias. Peguei os exemplos do Daniel Destro mais o artigo que ele escreveu para a revista java magazine e mandei ver.

Deu até pra fazer bastante coisa… o material que usei de referência ajudou muito mesmo, mas infelizmente não curti muito o thinlet.

Não gostei porque eu tinha que ficar decorando o nome dos componentes que eu colocava no arquivo xml para colocar então no código fonte. Daí fui obrigado a parar e começar a usar Swing mesmo.

Não tiro o mérito do thinlet, muito menos da galera que desenvolve soluções com ele, mas particularmente, achei meio embaçado trabalho desta maneira. Fazer as telas é rapidinho, mas fazer com que uma tela chame outra, ou seja, fazer com que elas se interajam para mim deu uma dor de cabeça e tanto!

Por isso, por enquanto eu sou mais swing, mesmo que tenha que atender requisitos simples que poderiam ser atendidos usando Thinlet!

Como mexi pouco, preciso dar uma olhada nesse ThinletUtils que o Daniel criou, e até mesmo no Genesis, para ver como a galera tá fazendo para usar o Thinlet. Talvez com estas soluções a coisa se torne mais simples

Seria legal se se criassem uma ferramenta para montar a tela igual ao ThinG mais ou menos, onde vc faria toda a tela lá, e depois essa ferramenta gerasse para você o código java, com todas as iterações entres os panels, botões e etc… deixando livro para o programador a implementação dos eventos… Quando criarem isso ai o bicho pega!!!

Abraços!
Thiago

Eu sei que já tem gente fazendo plugin do Thinlet para o NetBeans.

E sobre decorar o nome dos componentes do XML, eu não entendí direito. Se for os nomes das tags, é o mesmo que saber HTML. E sobre os nomes de cada componente na tela, para mim, é o mesmo que saber o nome dos objetos declarados no código. Não é?

[quote=danieldestro]Eu sei que já tem gente fazendo plugin do Thinlet para o NetBeans.

E sobre decorar o nome dos componentes do XML, eu não entendí direito. Se for os nomes das tags, é o mesmo que saber HTML. E sobre os nomes de cada componente na tela, para mim, é o mesmo que saber o nome dos objetos declarados no código. Não é?[/quote]

Olá Daniel!

Por exemplo… se no swing vc cria um JButton button = new JButton(); com a ajuda co eclipse ou um outro IDE de sua preferência, é só vc dar um ctrl + space e aparece uma listinha para vc visualizar rapidinho…

Mas no caso do thinlet, eu concordo que é como vc declarar nome de variáveis, mas o chato é que dá muito trabalho fazer isso aqui

Object o = meuForm.find("minhaTab");

no exemplo acima, “minhaTab” é uma string com o mesmo nome do componente no arquivo xml , que seria um componente tabbedPane, onde o atributo name possui o nome “minhaTab”…

Enquanto eu brincava, eu tinha que toda hora ficar alternando entre o código java, e o código xml.

Um problema deste tipo de abordagem, na minha opinião, seria o fato de que quando usamos thinlet, quando utilizarmos o nome de um componente errado, teremos uma exceção durante o runtime da aplicação, enquanto no caso do swing a exceção (ou erro) já será acusado na compilação.

Esse é o principal fator pelo qual mesmo para aplicações simples eu prefira Swing, apesar de thinlet ser mais interessante!!

Abraços!
Thiago

Bem Thiago, recomendo que você use o genesis então. Você (provavelmente) não vai precisar criar nenhum componente na mão nem tampouco programar da forma como você explicou.

A idéia básica do genesis para UI é que você desenvolva a maior parte do seu código em classes não ligadas ao framework gráfico e sim em POJOs.