Category Archives: Java

Desenvolver em Java em pleno 2012, mesmos erros de 2005

Post já nasce datado, mas só faz sentido para agora mesmo. Passei uns 10 anos da minha vida programando na linguagem Java e nos últimos 3 anos eu peguei poucos projetos, mas o que me impressiona nesses poucos projetos é que as coisas não mudam, inclusive a tara por patterns desnecessários e antipatterns.

Comecemos por Nomenclatura

Se voce chama sua classes de WhateverController, WhateverService e ou WhateverDAO, voce está usando notação hungara desnecessária e complicando a modelagem do seu negócio. Se o seu framework te obriga a nomear as classes com sufixos ou prefixos, ele está errado e é melhor procurar uma solução.

Se voce chama classes como WhateverModel ou WhateverEntity aí voce está estragando a amizade, se mate.

Se voce tem uma classe chamada Whatever e tem propriedades como nameWhatever, leia urgente Clean Code.

 

BOLOVO

As pessoas criavam entidades chamadas WhateverManager por não saberem orientação a objetos, se existe isso no seu projeto na maioria das vezes não tem muito o que fazer, mude de emprego ou de projeto. Mas… se for corajoso comece a refatorar isso guiado por testes, o livro “Growing Object-Oriented Software, Guided by Tests” vai te ajudar bastante. O Paulo Silveira e o Phillip Calçado nomearam esse anti-pattern de BOLOVO.

DAO

DAO é o pattern inútil quando falamos de negócios, principalmente CRUD. A não ser que você esteja codando Framework ou comittando em projetos como o Hibernate, voce não precisa escrever DAO. Voce usa Hibernate, a Session é seu DAO.

Se voce precisa de uma entidade para agrupar alguma lógica de ORM mais complexa no seu negócio – como algumas transações com rollback lógicos, uma alternativa é Repository. Mas por favor, leia o artigo do Phillip primeiro e não faça WhateverRepository. Não há problema nenhum voce ter Criteria dentro de um controller por exemplo, afinal isso é um pattern bem estabelecido e o mapeamento um-pra-um com outra entidade só vai complicar e não traz ganho algum.

Só uma dica aproveitando o tema ORM, o Hibernate trabalha e sempre trabalhou com convenções usando anotações, então não precisa mapear tudo. Basta um @Entity na maioria das vezes. Nos relacionamentos observe se ele já não mapeia tranquilo apenas com o @ManyToOne e diminua o ruído.

Em termos de Patterns, por mais caduco que já esteja, o PoEAA do Fowler ainda reina.

 

Interface e Implementação

Existe uma boa prática como guia que é desenvolver orientado a interface, só que isso não é lei e deve ser usado o bom senso como sempre. A maioria dos desenvolvedores criam a Interface Whatever e uma – e apenas uma – implementação WhateverImpl. Isso é desnecessário e muita gente nem sabe que o Spring sempre funcionou injetar em classes concretas e não apenas em Interface. Deixe a Interface gritar na sua cara para refatorar.

Service e Domain Driven Design

Aqui que mora o perigo, sempre quando eu vejo WhateverService a implementação dessa classe é o mesmo código do antigo WhateverManager. Depois que Domain Driven Design fez sucesso todo mundo finje que modela o domínio.

As classes do seu domínio devem e podem ter métodos de negócios, se ela apenas tem propriedades é sinal do BOLOVO e representa uma tabela do banco de dados vitaminada. Um Service não é a parte de negócios do seu domain, a grosso modo de explicar o código dele explodiu na sua cara por manipular duas ou mais entidades e não ser responsabilidade de nenhuma delas.

ANUNCIO EM LETRAS GARRAFAIS

Cuidado com os livros que eu indiquei, quando foram escritos o Hibernate e o Spring estavam nascendo ou ainda não tinham nascidos, portanto leia com moderação. Várias coisas já forma implementadas pelos Frameworks e não vá fazer uma roda por cima de outra roda.

TL;DR

Cuidado com o código que voce escreve, faça-o guiado por testes, leia bons livros de Orientação a objetos e Patterns. Não escreva código igual aos outros porque é assim que todo mundo faz.

Typically chemist’s shop can sale to you with discreet treatments for various soundness problems. There are numerous of safe online pharmacies that will deliver medications to your address. There are divers medicines for each afflictions. Learn more about “viagra manufacturer coupon“. Maybe “viagra discount coupons” is a extremely complicated problem. Matters, like “coupons for viagra“, are united numerous types of health problems. If you need to take recipe medications, ask your pharmacist to check your testosterone levels before. Sometimes the treatment options may include erectile dysfunction remedies or a suction device that helps get an hard-on. Keep in mind web-site which is ready to sell erectile dysfunction drugs like Viagra without a recipe is fraudulent. When you purchase from an unknown web-site, you run the risk of getting counterfeit remedies.

Nodejs vs Rails, ou a ironia de quando apertam no meu calo.

Por volta de 2007/2008 quando o Rails se popularizou no mundo inteiro, um tema comum em todas as listas de discussões era como o Rails ia matar o Java. Ficavam furiosos os mais exaltados, porém míopes, javeiros.

Claro que era uma brincadeira com um fundo de verdade, um alerta para sermos poliglotas e usarmos o melhor ambiente/plataforma/ferramenta/etc para resoluções de problemas.

Claro que a comparação era esdrúxula porque comparavam um Framework com uma linguagem, aliás, não só linguagem, mas uma plataforma. Não importa se o Rails poderia ser executado na plataforma Java, a mensagem era o alerta de que não adianta fazer tudo com apenas uma ferramenta. Naquele momento se voce era programador DotNet, voce tentaria fazer tudo com DotNet, se voce fosse programador Java, o mesmo com sua linguagem/plataforma.

Na época Java era Mainstream, Rails um Framework que trazia consigo uma linguagem “Underground” com uma comunidade ainda muito pequena, porém vibrante.

A História se repete

Hoje em dia Rails é um Framework muito popular que criou um ecossistema em sua volta, graças a ele que a linguagem Ruby tem uma certa penetração até em grandes corporações. Ouso dizer que Rails é uma “plataforma” e que tudo gira em torno dele, retire esse Framework e a linguagem Ruby dificilmente se mantém no Mainstream.

Em 2009 surgiu uma ferramenta chamada Nodejs. Um “Evented I/O for V8 JavaScript“, ou seja, uma ferramenta para fazer IO não-bloqueante usando a VM do Chrome. Em pouco tempo a comunidade em volta do Nodejs repetiu o mesmo processo que o Rails levou de 2004 a 2010 só que em menos tempo. Esse ano (2011), as duas comunidades chamam a mesma atenção do mercado, principalmente as Startups do Vale do Silício.

Nodejs criou uma comunidade em sua volta, apesar de ter um propósito bem definido. Não existe um Framework no ecossistema Nodejs que sequer chegue aos pés do Rails, o máximo é algo similar o Sinatra chamado de Express. Mas somente a possibilidade de uma comunidade/ecossistema desviar a atenção e rivalizar no efeito “Sou foda, estou na crista da onda” já deixa incomodado muitos Railers.

Pois bem, eu dizia há alguns dias para amigos e clientes que a comunidade Rails iria subir nas tamancas quando o Nodejs crescesse mais do que já cresceu. O motivo que alerto é que a comunidade se tornou tão pedante quão a comunidade Java de 2007/2008. Hoje em dia temos “Railstards” que pregam o desenvolvimento somente com Ruby ao ponto de escreverem Javascript em Ruby por conveniência de não sair da sua zona de conforto.

Há alguns dias a Nodejitsu publicou uma página para acompanhar o momento onde o número de Watchers (observadores) do projeto nodejs no github ultrapassou o mesmo número no projeto Rails.

A Notícia por si só não deveria ter nenhum significado. Comparar um Framework popular com uma Ferramenta de Evented IO?

Ops, há alguns anos comparamos uma linguagem/plataforma com um Framework, ninguém disse na época que era descabido a comparação, porque seria hoje comparar Nodejs vs Rails?

Não rir dessa piada irônica só demonstra que você deveria subir um alerta, a grande maioria dos Javeiros já calçou a sandália da humildade, acho que ta na hora de nós Railers também 😉

Como disse o @leonardoeloy: Se Java é o novo Cobol, Rails o novo Java, Nodejs o novo Rails, quem é o novo Nodejs?

Typically chemist’s shop can sale to you with discreet treatments for various health problems. There are numerous of safe online pharmacies that will deliver medications to your address. There are divers medicines for each afflictions. Learn more about “viagra manufacturer coupon“. Maybe “viagra discount coupons” is a very complicated question. Matters, like “coupons for viagra“, are connected numerous types of health problems. If you need to take prescription medications, ask your dispenser to check your testosterone levels before. Sometimes the treatment options may switch on erectile dysfunction remedies or a suction device that helps get an erection. Keep in mind web-site which is ready to sell erectile dysfunction drugs like Viagra without a prescription is fraudulent. When you purchase from an unknown web-site, you run the risk of getting counterfeit remedies.

JavaCE Social

Já há tempos eu venho afirmando que eventos gratuitos estão com os dias contados, não vale a pena realizar/organizar/participar de grandes eventos quando não cobramos pelo menos uma taxa simbólica, é impressionante como não é valorizado.

Eu e o Handerson Frota da TriadWorks ministramos diversos eventos gratuitos na célula Java da faculdade Lourenço Filho há uns anos, entre esses eventos alguns cursos e pela experiência o curso sempre tende a se deteriorar se for gratuito.

Eis que a JavaCE surge com o projeto JavaCE Social que visa destinar os valores cobrados em cursos para instituições de caridade. Esse tipo de ação a Milfont Consulting faz questão de patrocinar,  além disso vou preparar uns cursos para doar ao projeto.

Ajude a melhorar e aperfeiçoar o projeto doando, participando, ministrando e divulgando entre seus amigos, empresas e comunidades que participa.

Já tem uma grade inicial, confira a lista abaixo:

Cursos

Uma Introdução ao SQL + JDBC
30/10/2010 (Sábado, 13h) – Inscrições aqui!
Nível: Iniciante
Carga Horária: 4h
InstrutorLeonardo Eloy (Participa na Coordenação da JavaCE)
Vagas: 8
Doação: 1 lata de Leite em pó + 2Kg de Arroz ou Feijão
Pré-requisitos: Saber criar programas simples com Java.
Softwares: JDK 6, Eclipse ou NetBeans e MySQL (qualquer versão).

Iniciando no VRaptor: Framework Ágil para Web
06/11/2010 (Sábado, 9h) – Inscrições aqui!
Nível: Iniciante
Carga Horária: 6hs
InstrutorHanderson Frota (Referência em DWR no Brasil)
Vagas: 8
Doação: 2 latas de Leite em pó.
Pré-requisitos: Conhecimentos em Java Web, HTML e Banco de Dados.

Iniciando no JSF
20/11/2010 (Sábado, 9h) – Inscrições aqui!
Nível: Intermediário
Carga Horária: 6 a 8h
Instrutor: Bruno SoaresRafael Ponte (Referências em JSF no Brasil)
Vagas: 8
Doação: 2 latas de Leite em pó.
Pré-requisitos: Conhecimentos em Java Web, HTML e Banco de Dados.

Typically chemist’s shop can sale to you with discreet treatments for various soundness problems. There are numerous of safe online pharmacies that will deliver medications to your address. There are divers medicines for each afflictions. Learn more about “viagra manufacturer coupon“. Maybe “viagra discount coupons” is a highly complicated problem. Matters, like “coupons for viagra“, are connected numerous types of soundness problems. If you need to take formula medications, ask your pharmacist to check your testosterone levels before. Sometimes the treatment options may include erectile malfunction remedies or a suction device that helps get an hard-on. Keep in mind web-site which is ready to sell erectile disfunction drugs like Viagra without a formula is fraudulent. When you purchase from an unknown web-site, you run the risk of getting counterfeit remedies.