sexta-feira, 10 de outubro de 2008

Livro de arquitetura interessante

O papel de arquiteto é bem interessante e desafiador e para isto devemos estar munidos de um bom arsenal de livros e sites que nos auxiliem. Queria através deste post comentar sobre um livro que estou lendo que estou achando bastante interessante.

Software Systems Architecture: Working
With Stakeholders Using Viewpoints and Perspectives

O livro como o próprio nome diz fala a respeito de arquitetura de software e alguns dos tópicos são bem interessantes. Entre eles cito os seguintes:
  • Como projetar uma arquitetura que reflita os interesses dos stakeholders (partes interessadas).
  • Como comunicar que sua arquitetura atende os requisitos dos diferentes interessados.
  • Focar em aspectos arquiteturais importantes.
  • Uso de perspectivas para verificar que sua arquitetura endereça importantes qualidades como escalabilidade, performance e segurança.
  • Documentar a arquitetura como um conjunto de visões.
Ainda não terminei de ler o livro, mas até o momento ele se mostrou bem interessante. É bem esclarecedor tentar ver a arquitetura com diferentes visões de partes interessadas diferentes. Ele também mostra também alguns exemplos práticos o que torna a leitura mais fácil.

É isto aí pessoal. Para quem tem interesse no assunto vai aí uma boa dica de livro.

segunda-feira, 6 de outubro de 2008

JSF versus Struts

O objetivo de ambos os frameworks é facilitar a implementação da lógica da parte de visão e implementar a divisão da lógica de visão e da lógica de negócios. Para comparar as duas tecnologias vamos comparar alguns quesitos importantes.

Um fator muito importante para arquitetos de software é o risco que se tem em um projeto. E podemos dizer que com relação ao numero de desenvolvedores Struts ganha e muito de JSF. Para tomar a decisão entre usar ou não esta tecnologia é bom conhecer a equipe de desenvolvimento do projeto em questão.

Outro fator importante é a maturidade do framework. Temos hoje vários sistemas em produção utilizando a tecnologia Struts enquanto temos uma quantidade bem menor de sistemas em produção utilizando JSF. Apesar de JSF ter evoluído bastante nestes últimos anos, temos que Struts ainda possui uma maturidade maior.

Com relação à evolução do framework JSF ganha de lavada, por se tratar de uma especificação. O Struts original parou na versão 1.3.9 e mudou totalmente de conceito na versão 2.0 em que foi substituído pelo framework WebWork apenas por questões de marketing.

Outro ponto que JSF ganha de lavada é com relação à maior flexibilidade do controle e o tratamento de eventos. Utilizando JSF não é necessária a extensão das classes Action e nem a utilização de formulários o que simplifica o desenvolvimento por tirar camadas desnecessárias.
Com relação à navegação tanto Struts quanto JSF são bem flexíveis, mas JSF supera devido ao fato das regras de navegação estar desacopladas das ações. Além disto, com JSF é mais fácil ter uma página com várias regras de navegação uma vez que não é necessária a utilização de ifs e elses.

Com relação à integração e extensibilidade mais pontos para JSF. Struts é neutro neste ponto, possuindo integração com apenas poucos frameworks, enquanto JSF possui integração com vários frameworks.

Com relação ao desenvolvimento de páginas temos mais ferramentas RAD para o desenvolvimento JSF, uma vez que o framework foi feito se pensando neste ponto. Outro fator a ser considerado é o apoio de grandes empresas. JSF tem tido o apoio de grandes empresas como IBM, Oracle e Red Hat o que torna a adoção ao framework maior, uma vez que dá o aval que o framework irá crescer e evoluir.

Uma desvantagem de JSF é o fato de ser menos transparente do que Struts. Com JSF existem muito mais coisas acontecendo por trás das cenas do que aplicações feitas em Struts, o que faz com que JSF seja mais difícil de entender e mais difícil de verificar a performance e otimizar.

E agora? O que vamos usar para decidir entre as duas tecnologias? Se vamos começar um projeto hoje, devemos considerar vários fatores. Se você não tem muito tempo para realizar a avaliação de frameworks e não tem uma equipe qualificada para a utilização de JSF decida por utilizar o framework Struts. Mas por uma visão estratégica, por ser uma tecnologia que irá evoluir, ter apoio das grandes empresas de mercado e por existirem ferramentas de desenvolvimento rápido eu encorajo a utilização de JSF.

domingo, 5 de outubro de 2008

Questões de UML

O que é UML?

UML ou Unified Modeling Language é uma linguagem gráfica para visualizar, especificar e construir e documentar os artefatos de um sistema.Ela permite criar boas práticas para todos os aspectos do sistema antes de efetivamente implementar o sistema.

O que é modelagem? Quais as vantagens de criar um modelo?

Modelos são simplificações da realidade. Modelagem é uma técnica de engenharia de software que permite a criação de modelos. A vantagem maior de se criar um modelo é poder se especificar a estrutura e os comportamentos do sistema.

O que são diagramas?

Diagramas são representações gráficas de um conjunto de elementos normalmente composto de objetos e associações.

Quais são os diagramas mais comumente utilizados?

Os diagramas mais comumente utilizados são: Diagramas de Caso de Uso, Diagrama de classes, Diagrama de Objetos, Diagrama de seqüência, Diagrama de estados, Diagrama de Colaboração, Diagrama de Atividades, Diagrama de componentes, Diagrama de Deploy.

O que são relacionamentos?

Relacionamentos são como ocorre a comunicação entre os diferentes elementos da UML.

Como os diagramas são divididos?

Os diagramas são divididos em diagramas estáticos e dinâmicos.

O que são mensagens?

Uma mensagem é uma especificação de uma comunicação entre dois elementos da UML. A message is the specification of a communication, when a message is passed that results in action that is in turn an executable statement.

O que é um caso de uso?

Um caso de uso especifica o comportamento de um sistema ou parte dele. Eles são utilizados para capturar o comportamento que precisa ser desenvolvido. Eles envolvem interação de atores e do sistema.

É isto aí pessoal. Espero que ajude...

Questões de Hibernate

Como configurar o Hibernate?

Você deve configurar o arquivo hibernate.cfg.xml ou hibernate.properties e os arquivos de mapeamento (*.hbm.xml) que são usados pelo SessionFactory. Utilizando o Hibernate com JPA os arquivos de mapeamento podem ser substituídos por anotações.

O que é o SessionFactory? Ele é um objeto thread-safe?

É um objeto responsável por gerenciar a criação de sessions para uma fonte de dados específica. SessionFactory é thread-safe de forma que várias threads podem o acessar simultaneamente requisitando objetos session.

O que são objetos transientes?

Um objeto é dito transiente quando não tem representação no banco de dados e nem o EntityManager o conhece. Isto significa que alguma alteração no objeto não é refletida na base de dados.

O que são detached Objects?

Objetos detached são objetos que são persistidos, mas não estão associados a uma sessão do Hibernate. Ou seja, o Entity Manager não o reconhece apesar de ser um objeto que possivelmente possui representação na base de dados.

Como o Hibernate distingue entre objetos transientes e objetos detached?

Para distinguir entre objetos transientes e detached o hibernate utiliza a propriedade version do objeto.

É isto aí pessoal. Se precisarem de outras questões podem mandar email. Espero que ajude...

sexta-feira, 3 de outubro de 2008

EJB 3 versus Spring

O objetivo dos frameworks é esconder a complexidade dos desenvolvedores (como, por exemplo, controle de transações, segurança e persistência), facilitar o reúso de código, melhorar a produtividade e conseqüentemente melhorar a qualidade do software. E neste ponto podemos dizer que tanto Spring quanto o EJB 3 cumprem muito bem este objetivo.

O que podemos dizer então sobre os dois frameworks:
  • O framework Spring é um framework popular, Open Source e é desenvolvido inicialmente pela empresa Interface21 Inc. Sua arquitetura é baseada principalmente em arquivos de configuração XML. O framework Spring não é um padrão de mercado e não possui apoio de grandes empresas como IBM, Oracle e Sun.
  • O framework EJB 3 é um padrão de mercado definido pela JCP e é suportado pelas maiores empresas que utilizam J2EE. Possuem implementações disponíveis pelas empresas Jboss e Oracle. EJB 3 faz forte uso de anotações disponíveis a partir de Java 5. As versões anteriores de EJB se mostraram pouco produtivas e complicadas, o que foi modificado na versão 3 do framework.

Uma vantagem que vejo é o fato de EJB 3 ser independente de empresas. Como exemplo disto, temos o fato do Oracle usar o TopLink como implementação da especificação JPA e o JBoss ter como implementação o Hibernate.

Por outro lado temos que podemos rodar o Spring em qualquer servidor de aplicação, mas pelo fato do Spring não ser um padrão da indústria estamos travados ao Spring e os serviços fornecidos por ele.

Outra vantagem do EJB 3 é o fato de como o framework está fortemente acoplado com o servidor, estes servidores podem melhorar suas performance atuando em conjunto com o framework. A integração entre JTA e JPA com os servidores é bem alta o que faz com que os servidores sejam extremamente otimizados para este tipo de operação com EJB3.
Uma vantagem do Spring seria a facilidade de utilizar a injeção de quaisquer componentes. Com EJB 3 só se possui controle dos componentes que são Beans do EJB e também do contexto de persistência.

Com relação a XML ou anotação, temos EJB 3 utilizando preferencialmente anotações e Spring utilizando preferencialmente XML. Isto, podemos dizer que é a gosto do freguês. Particularmente prefira a anotações por ser menos verboso, mais robusto, além de possuir verificação de consistência em tempo de compilação.

Como conclusão, temos que ambos, são ótimos frameworks, sendo que cada um deles possui suas vantagens. Particularmente em um projeto novo decidiria pelo EJB 3 devido ao maior suporte das grandes empresas e por ser um padrão.

É isto aí pessoal. Espero que isto ajude alguém...