quinta-feira, 10 de fevereiro de 2011

Spring Web Flow

Olá pessoal.

Hoje venho apresentar a vocês o spring web flow. Estou trabalhando com ele há um bom tempo e estou gostando muito. Abaixo segue uma apresentação sobre spring web flow que explica por alto o seu funcionamento e faz algumas comparações com alguns frameworks MVC existentes no mercado.

Essa apresentação mostra também um exemplo prático do uso do web flow, e como fazer testes untários de fluxos.

Para melhor aprendizado, aconselho fazerem o download da aplicação exemplo e configura-lá.Um vez feito isso comece a acompanhar os slides.

Segue os passos para configurar a aplicação exemplo no eclipse.

1) Deve-se ter o maven instalado na máquina. Quem não tiver, clique aqui para aprender a instala-lo.

2) Faça o download da aplicação exemplo aqui e descompacte-a.

3) Abra o prompt do comando (cmd) e vá até a pasta do projeto (onde está localizado o pom.xml).

4) Rode o comando mvn install (na pasta do projeto).

5) Rode o comando mvn eclipse:eclipse (na pasta do projeto).

6) Abra o eclipse e importe o projeto.




Tomara que gostem. Abraço.

domingo, 26 de setembro de 2010

Gestão do conhecimento no ensino de computação.

Um dia desses, eu estava sentado no sofá e fiquei imaginando como o ensino de computação nas organizações ou instituições de ensino poderiam ocorrer de forma mais eficiente.

O fato é que nosso modelo de ensino de computação atual, nas faculdades por exemplo, assume um processo de aprendizagem medieval e muito formal. Geralmente os alunos são avaliados através de provas que por sua vez é uma avaliação individual. A colaboração e o trabalho em equipe não são levados em consideração nesse contexto, distanciando assim os alunos do cotidiano profissional que está por vir. Em minha opinião, este é um processo que deve ser completamente repensado (geralmente o trabalho colaborativo nas instituições de ensino é chamado de “cola”).

A evolução da tecnologia e a demanda crescente de conhecimento evolui muito rápido. Os métodos atuais de difusão do conhecimento não acompanham a velocidade dessa evolução. Minha sugestão para esse problema é a adoção da “dinâmica das comunidades open source” para o ensino de computação. O mundo open source é composto por comunidades que são auto-organizadas e incentivam a disseminação do conhecimento de maneira informal. Sem dúvidas, elas são um excelente exemplo de como distribuir conhecimento de forma sustentável para produzir um código de qualidade.

Além da questão da aprendizagem, um outro fator importante é o trabalho de colaboração existente no mundo open source. Trabalhar em grupo significa compartilhar conhecimento. Geralmente, um grupo tem mais capacidade de gerar criativamente alternativas, levantar as vantagens e desvantagens de cada uma, selecionar as viáveis e tomar melhores decisões do que os indivíduos separadamente. Trabalhar em grupo também traz motivação para o membro, pois seu trabalho vai estar sendo observado, comentado e avaliado por pessoas de uma comunidade da qual ele faz parte. Quando um indivíduo expressa ideias para poder se comunicar com outros, ele trabalha ativamente seus conceitos, refletindo sobre os mesmos e refinando-os, trazendo uma melhoria à qualidade do trabalho e do aprendizado.

A pergunta que sempre fica em minha mente é: o que falta para isso acontecer no ensino de computação?
Sinceramente, eu mesmo não sei a resposta. Mas, com certeza, já deveria está acontecendo na velocidade da luz (Me dê sua força, Pégasus).

terça-feira, 16 de março de 2010

Instalando o Maven

O post de hoje é um guia prático para instalação do maven.
Vejam o vídeo que eu preparei!

Bem simples e fácil fazer sua configuração inicial.
Mais abaixo tem um resumo da instalação



Resumo:

  1. Baixar o maven: http://maven.apache.org/download.html
  2. Descompactar o arquivo.
  3. Adicionar as variáveis de ambiente M2_HOME , M2;
    • M2_HOME = D:\caminho_pasta_maven\apache-maven-x.y.z
    • M2 = %M2_HOME%\bin
  4. Alterar a variável PATH:
    • PATH = acrescentar %M2%
  5. Verificar a existência da variável JAVA_HOME e a referência %JAVA_HOME%\bin no PATH.
  6. Rodar o comando "mvn -version" no cmd.
É só isso. Até

domingo, 28 de fevereiro de 2010

Gerência de projeto de software nos tempos modernos

O post de hoje é uma crítica à gerência de projeto de software.
Tenho visto ultimamente que muito se fala de processo, metodologia, cronograma e pouco se é falado de construção de software de qualidade.


Um breve comentário para reflexão...
Desenvolvedor faz cronograma? Estimativa? Ou desenvolve?

Abraço!

terça-feira, 26 de janeiro de 2010

Obtendo maior reuso de código com o padrão “Application Service”

Durante a concepção de um novo software quase sempre nos deparamos com a mesma estrutura clássica de separação de camadas: dao, service, facade e controller.
Em aplicações corporativas, muitas vezes é interessante reutilizar códigos já usados em outras aplicações. Isso porque, nessas aplicações, geralmente as classes que compõem o modelo de dados são as mesma para a corporação.

O reuso de código é sempre mais eficaz quando temos uma camada de serviço fina, ou seja, com pouca lógica da aplicação em si. Porém, nos casos em que temos uma camada de serviço com muita lógica de negócio específica da aplicação, o reuso destes serviços para outras aplicações torna-se mais difícil.

Para melhor entender, veja considere a seguinte situação de exemplo:

Tem-se duas aplicações: uma de cadastro de funcionários e outra premiação de funcionários (aplicações típicas de empresas). Baseado nisso vamos considerar:

  • As aplicações são distintas sendo que, cada uma delas tem a suas lógicas de negócio específicas (serviços);
  • As aplicações pertencem à mesma corporação portanto,vamos considerar que o modelo de dados (model) e a camada de persistência (dao) são iguais para ambas;
  • Cada aplicação tem sua fachada (facade) que expõe uma interface que controla o acesso dos diferentes clientes aos serviços.

Para maior compreensão veja a figura 1 com projeto das duas aplicações.


Figura 1

No exemplo mostrado pela figura 1, vimos que em algumas situações as aplicações podem requerer alguma lógica extra para que executem corretamente suas tarefas (métodos específicos da figura 1). Preferencialmente, os facades não devem conter lógicas de negócios e os services, idealmente, não devem conter lógicas específicas de um caso de uso ou aplicação. Desta maneira há mais reuso e o acoplamento entre os serviços diminui. Assim, pode-se introduzir uma camada que concentra a lógica específica e coordena ações dos services para que essa lógica específica seja corretamente executada. Esses serviços são chamados de application services.

Voltando ao exemplo, a organização dos serviços ficariam da seguinte forma (figura 2):


Figura 2

Ou seja, os métodos comuns mostrados na figura 1 ficariam dentro de FuncionarioService e os não comuns ficariam dentro FuncionarioAppService de cada aplicação.
Desta forma o facade de cada aplicação fica encarregado de fazer as devidas chamadas para a camada de negócio (figura 3).


Figura 3

Em síntese, isto é o que chama-se de componentização. No momento em que agrupamos coisas comuns e que podem ser reutilizadas em aplicações distintas, pode-se criar um JAR (componente) com esses fontes e usá-lo nas aplicações sem necessidade de replicação de código.

Até breve!

domingo, 25 de outubro de 2009

Enumeração de Caminhos - Algoritmo Grafos

Olá pessoal!
Na postagem de hoje irei mudar um pouco o foco atual do blog que, desde seu início, tem sido focado mais em tecnologias (spring, hibernate, jsf entre outras).

Hoje vou comentar um pouco sobre grafos que sempre foi um assunto de meu interesse na época de faculdade. Mais especificamente, através de uma apresentação de slides, vou mostrar dois algoritmos (baseados em rotulação de nós e arcos) para encontrar o número de caminhos entre dois nós de um grafo acíclico.

Os algoritmos são bem interessantes e tranquilos, visto que podemos usar e abusar da orientação a objetos para implementa-los (os que tornam mais interessante ainda).

Para melhor entendimento da apresentação, aconselho que o leitor tenha já um certo conhecimento de conceitos básicos de grafos. Dentre eles pode-se citar: matriz de adjacência, nós sucessores, antecessores etc.



Os fontes da implementação mostrada na apresentação estão disponíveis o link abaixo:
Fontes dos algoritmos

Quem desejar somente o executável está disponível em:
JAR da implementação

O implementação foi feita em Java... Só para lembrar!!

Abraço!!

quinta-feira, 27 de agosto de 2009

Desvendando o ZK Framework

Olá!
Aproveitando o embalo do post anterior, neste vou apresentar conceitos do ZK Framework e um exemplo de implementação (ressaltando os conceitos) através de alguns slides. Esta apresentação trata-se de apenas uma referencia inicial para as pessoas que desejam se aprofundar na tecnologia.
A apresentação está bem interessante! Vale a pena dar uma olhada!




Para maiores informações: http://www.zkoss.org/

Até!