sexta-feira, 7 de outubro de 2016

REST - Como passar um parâmetro que contém ponto (.) pela Url com Spring Mvc



Esse post é curto, somente para dar uma dica de como fazer para que seu controller entenda um parâmetro que possui  (.) ponto e não quebre.

Alguns casos precisamos no get buscar algo que seja filtrado por determinado parâmetro, por exemplo quando buscamos um usuário, uma Url basicamente ficaria assim:

GET    "/user/{username}"

O problema é quando esse essa variável que é passada na uri possui um ponto, que ocasiona a quebra do valor. Ex

GET  "/user/tiago.ribeiro"

O spring entenderia que foi passado somente "tiago" descartando então tudo que vem após o (.).  Existem algumas estrategias para burlar isso, como colocar outro nome após o username do seu path,  por exemplo:

GET  "/user/{username}/search"

Assim ele não descartaria o que viesse após o ponto. Existe uma outra maneira e que na minha opinião é a mais elegante que seria a inserção de  (:.+) após a declaração do parâmetro. 

GET  "/user/{username:.+}"

Dessa maneira o Spring entenderá que o ponto faz parte do parâmetro passado e não quebrará.

Bem como falei esse post foi curto, espero que tenham gostado.


terça-feira, 4 de outubro de 2016

Forçar atualização do JavaScript usando Gulp



Todos sabemos como o uso de bibliotecas JavaScript vem crescendo nos últimos anos, muito se deve por conta do Node que permitiu a evolução da linguagem, assim como o uso de padrões na construção de apps no lado cliente.
 Um dos grandes problemas do uso de js é o cache que muitas vezes mascaram mudanças feitas de uma versão para outra, quase nenhum usuário é atento á limpar o cache de tempos em tempos.

Existem varias maneiras de evitar esse problema, uma delas é incluir uma tag no header de sua pagina informando quando o cache deve expirar. Ex:


               <META HTTP-EQUIV="EXPIRES" CONTENT="Mon, 22 Jul 2002 11:12:01 GMT">

Outra opção é o versionamento dos arquivos JS e CSS para forçar ao browser busca-los novamente quando perceber que existe um arquivo novo no app.


Essa foi a solução que adotamos para nosso sistema, com o uso do gulp para fazer esse controle. Explicarei nesse post as bibliotecas necessárias para fazer isso funcionar no seu problema. Para isso irei considerar que quem está lendo esse artigo está usando uma aplicação com NodeJs e Gulp.

Decidimos usar o timestamp para dar a "versão" dos arquivos. Para fazer a atualização do nome dos arquivos no nosso index.html usamos a biblioteca gulp-html-replace para fazer o replace do nome dos arquivos.



Para instala-la basta um simples Npm install:

npm install --save-dev gulp-html-replace

É preciso de importa-la também no seu arquivo gulpfile.js.

var htmlreplace = require('gulp-html-replace');

Crie uma variável global chamada de timestamp para recuperar o horário local e  adiciona-la nos arquivos que deseja "versionar". 

var timestamp = new Date().getTime();

Então na hora que eu faço o build meu arquivo assume a forma de algo assim: app_1475179620498.js assim como o css.

Na hora da construção do app eu inclui a seguinte tarefa para fazer o replace do nome dos arquivos:

gulp.task('htmlreplace', function() {
     gulp.src( '/index.html')
       .pipe(htmlreplace({
           'css_vendor': 'css/'+ filename.vendor.css,
           'css_app': 'css/'+  filename.app.css,
           'js_vendor': 'js/'+  filename.vendor.js,
           'js_app': 'js/'+  filename.app.js
       }))
       .pipe(gulp.dest('./dist'));
    });

No metódo task eu inicio a tarefa de replace passando uma função como parametro, o src é onde está localizado o arquivo que quero modificar. pipe é a função propriamente dita.
css_vendor, css_app, js_vendor, js_app são chaves que incluirei no index.html para que sejam trocados os nomes dos arquivos pelos nomes novos criados com um timestamp.
O filename "ponto" alguma coisa são variáveis que estarão armazenando o novo nome dos arquivos que foram criados.

Por fim a mágica onde tudo acontece, na página que você quer que sejam trocados os nomes do arquivos, voc~e incluirá tags que funcionarão como chaves. Tal como a imagem abaixo. 


Notem que onde contém as chaves   <!-- build:css_vendor -->,  <!-- build:css_app -->, <!-- build:js_vendor -->,
<!-- build:js_app -->  é onde será trocado o nome do arquivo pelo novo.
Resultado final é esse da imagem abaixo.


É isso, espero que esse pequeno e simplificado artigo seja util para quem quiser utilizar uma estrategia para forçar o browser a buscar novo arquivo js/css sempre que uma nova versão de sua aplicação for publicada.

x

quinta-feira, 21 de julho de 2016

ElasticSearch, algumas coisas que você precisa saber.




Voltando a escrever após 4 anos, e o que me fez voltar a escrever? ElasticSearch, esse fantástico motor de busca distribuído, feito pela Apache. Sua busca funciona no modelo full-text, onde você tem a mágica busca no estilo Google, que você digita um texto que no ElasticSearch é tratado como Termo e ele faz todo o trabalho de busca para você.


Algumas das vantagens do ES é que ele possui uma api  RESTfull, trabalha com Documentos tal qual um banco NoSql, seus dados são disponibilizados em tempo real e pode ser distribuído e configurado para apresentar alta confiabilidade.


Como falei ele armazena dados em  Documents no formato Json, formato universal suportado por quase todas as linguagens de programação hoje em dia.


O ES trabalha com alguns termos para simbolizar seu banco de dados, são eles:
Index, Type, Document, Field, onde:


Index ou índice representa um banco de dados.
Type ou tipo representa uma tabela do seu banco de dados.
Document ou documento simboliza uma linha de dados da tabela.
Field ou campo é uma coluna de uma tabela.


Fazendo uma analogia com um banco de dados relacional onde teríamos o banco MeuBancoTeste com a tabela usuário, com o as seguintes colunas id, login e senha e dados:


No ES teríamos a seguinte representação para esses dados.

O documento corresponde ao json dentro do _source, esse documento possui 3 campos: id, login e senha. O campo _id no json principal corresponde ao id que o elastic usa pra indexar aquele documento.
Simples não é?

Outra simplicidade é o uso de Rest para manipulação, com as operações já conhecidas. POST, PUT, DELETE e GET.

Criar um indice é muito simples, basta usar um metodo post informando o nome do indice que gostaria de criar. Usando nosso exemplo ficaria assim:
<pre name="code" class="delphi">
curl -XPUT 'localhost:9200/MeuBancoteste?pretty'
</pre>
O retorno dessa chamada seria algo como:
<pre name="code" class="delphi">
{
           "acknowledged": true
}
</pre>

Criando nossa tabela usuário e já populando no Es.
<pre name="code" class="delphi">
curl -XPUT 'localhost:9200/MeuBancoteste/usuario/0?pretty' -d '
{
  "login": "aluno",
  "senha" : "1"
}'
</pre>
Como podem perceber é muito simples de se trabalhar.
Mas o mais fantástico do ES na minha opinião é a busca por algo nele, ele tem um sistema de busca
por relevância, onde ele vai pontuando internamente cada vez que aquele termo é procurado, e assim ele
irá aparecer na frente quando você fizer um busca.

Bem esse foi um post simples mais para apresentar o ElasticSearch, essa poderosa ferramenta para indexação de documentos. Postarei mais sobre o seu uso, mais a frente.







terça-feira, 15 de maio de 2012

Java CE Community Conference - O que rolou - 2º dia


Sábado dia 12/05/2012 foi o segundo e ultimo dia desse grande evento, perfeito em todos aspectos, muito organizado e com palestras de alto nível. Queria deixar logo de cara um agradecimento ao pessoal da Triadworks e Milfont Consulting por estarem sempre organizando grandes eventos no Ceará, podem ter certeza que vocês tem grande parcela na evolução dos profissionais locais. Bem agora vamos ao que interessa, ou seja, o resumo de tudo que rolou no ultima dia de conferencia

A primeira palestra do dia foi do Alberto Sousa "Scala, 1 ano de experiência". Como cheguei atrasado peguei só o final e não poderei comentar muito sobre a mesma, mas a Caelum também fez um review sobre o evento e quem tiver curiosidade de ler pode dar uma conferida aqui

O segundo palestrante do Sábado Marlus Saraiva da Fortes Informática com "JasperReports On Rails" comentou sobre alguns problemas encontrados por ele e sua equipe no desenvolvimento de relatórios no rails, hoje utilizam um biblioteca chamada RJB, Ruby Java Bridge para conseguir gerar relatórios.

Luca Bastos iniciou a terceira palestra "Machine Learning" que é o estudo de como construir o sistema que automaticamente melhorem com a experiência. Funciona com a junção de algoritmos + computação sobre demanda. Luca deu como exemplo de aplicações que fazem seu uso, o Linkedin. Interessante que Luca estudou, mas nunca teve oportunidade de trabalhar com Machine Learning e até brincou que faz parte do seu cinto de utilidades, que contem diversos assuntos que ele estuda para caso um dia precise. O homem é um monstro. Api Java para trabalhar com Machine Learling chama-se Weka. 

Mauricio Linhares fechou a manha de palestras com a missão de defender o uso de Scala, depois que Alberto Sousa falou de suas experiências negativas com a mesma. Mauricio precisou usar Scala quando sentiu a necessidade de migrar seu projeto em Ruby para Java (é ele não se via mais programando em Java) Seus motivos são que Java envelheceu e não acompanhou a evolução das outras linguagens.
Mauricio deu como pontos positivos da Scala: uso de Closures, possuir bibliotecas maduras, linguagem compatível com o código Java, ferramentas em situações aceitáveis para uma linguagem que está chamando atenção agora.

Como pontos negativos citou: que não foi feita para cruds web, pois seu foco é programação concorrente e para sistemas de mensageria, features muito complexas, coleções diferentes de Java, deve-se ter cuidado.

Rodrigo Kumpera abriu o período da tarde, seu tema foi "Crie aplicações nativas para Iphone e Android com o Mono" Kumpera relembrou a evolução dos telefones celulares.Contou que algumas preocupações que devemos ter quando desenvolvemos para dispositivos moveis é saber que uma hora ele vai falhar, uma hora os dados vão corromper ou a net ficar lenta. Para tentar amenizar tais problemas Kumpera deu algumas explicações arquiteturais ensinando o que pode ser compartilhado na aplicação e o que não pode.

Mostrou-nos o funcionamento de uma aplicação feita por ele chamada MWC que serve para organizar eventos e funciona para todas as plataformas, é open source e está liberada no seu guit.

A segunda palestra da tarde com tema "Não está feito até estar testado - integração continua e o Builda" foi feita pelo Tiago Bastos. Seu lema Works on every machine, testes tem que rodar e compilar. A falta de uma ferramenta de integração que funcionasse em diversas linguagens fez com a empresa em que trabalha iniciasse o projeto Builda. Sua instalação é simples e contem 3 passos: adicionar um repositório, adicionar uma chave publica e clicar em build. Vale a pena lembrar outra frase proferida por Tiago " Programar não é só escrever código, temos que garantir que ele funciona ". Uma curiosidade do projeto Builda é que quando estava em fase de desenvolvimento era o próprio projeto que fazia sua integração. Builda é software proprietário e precisa de uma licença. 

Regis Melo deu uma palestra sobre "Como construir software para rodar nos 7 continentes". Sua palestra consistiu em contar experiências de vida em seus 23 anos de desenvolvimento, hoje dono da Sagarana Tech, passou por vários desafios e possui diversos produtos espalhados pelo mundo. 

" Big data analytics – Por que o dado por si só não significa nada " foi o assunto abordado pelo Fernando Meyer, que inovou com slides feitos a mão. Muito criativo. 
Fernando explicou que Big data nada mais é que dados, a única diferença para um BD normal é como esses dados são medidos. Existem N formas de armazenar dados. exemplos de sistemas de armazenamento de dados são o Mongo e o Cassandra. 

Ultima palestra do evento foi dada por Alexandre Costa Martins da Dataprev, que resolveu falar sobre "Desafios e experiências no desenvolvimento de um sistema do tamanho do Brasil" essa é outra palestra que não poderei comentar pois me ausentei do evento, mas deve-se louvar a atitude da Dataprev, um órgão publico federal que fez presente ao evento custeando a entrada de 30 de seus funcionários.

Bem isso foi o que rolou nesses 2 dias de eventos, pelo "resumo" que é um pouco extenso dá para ver como foi bom o nível das palestras e que venham os próximos.

sexta-feira, 11 de maio de 2012

Java CE Community Conference - O que rolou - 1º dia

Hoje 11/05/2012 começou em Fortaleza o Java CE Community Conference um dos maiores eventos do Brasil relacionado a linguagem Java, confesso que o evento está superando minhas expectativas e  olhe que elas sempre foram grandes. Tentarei resumir em dois posts (um para o primeiro dia e outro para o segundo dia) tudo que rolou na conferencia!

O credenciamento dos participantes começou por volta das 7:30hs, a primeira palestra sofreu um pequeno atraso de  +- 15 min. O evento não poderia começar com palestrantes mais gabaritados que o Paulo Silveira e Raphael Lacerda com o tema "Chegando ao Lambda no Java 8"  Raphael foi o primeiro a falar e mostrou alguns exemplos de listas no java e como fazemos para itera-las hoje, após isso falou sobre o lambda e sobre  Api orientada a fluent interface   que faz por exemplo, o desenvolvedor iterar uma lista com poucas linhas de código. Lambda usa proxy dinâmico o que faz o processamento ficar um pouco mais lento, mas o ganho em economia de código compensa. Paulo entrou na palestra para falar sobre o Java 8 e suas novidades, já está no 36º build  e entre as mudanças propostas teremos um método  forEach na interface List mas não tenhamos medo a jvm saberá defender os métodos para evitar quebra de contrato nos códigos antigos, teremos uma espécie de Herança múltipla, interfaces serão classes abstratas com a restrição de não poderem conter atributos.
Lambda estará incorporado no Java 8, o método sort foi incorporado as listas e não só as coleções.

Loiane Gronner foi a segunda palestrante do dia com o tema "ExtJs 4 + Vraptor uma combinação explosiva" uma grande vantagem dessa combinação dar-se pela fácil maneira que o vraptor sérializa seus objetos, dando suporte a json já. Ela fez questão de deixar claro que não existe framework perfeito citando inclusive a vantagem do ExtJs de se integrar a outros frames java script caso o desenvolvedor sinta falta de algo como Jquery e Prototype.
Mostrou o clássico exemplo do ExtJs, o tema Desktop que ele permite desenvolver, não se omitiu ao contar a desvantagem do ExtJs  por ser Gpl 5 e não poder ser comercializado, mas o valor da licença sai em torno de  U$ 600,00 por desenvolvedor. Loiane deu exemplos de como trabalhar com MVC no ExtJs e como ficaria usando um projeto com camadas MVC também no lado do cliente.
Por ultimo ela comentou sobre o  sencha touch 2 que pode ser usado para mobile e é o primeiro framework JS para mobile, permitindo também desenvolver aplicações cross device.

A terceira palestra do dia foi ministrada pela dupla da TriadWorks Marcelo Diniz e Yuri Adams e o tema escolhido foi "Gradle  envolvido na automatização", fui apresentado a essa ferramenta de automatização de tarefas, confesso que gostei bastante e vou pesquisar mais sobre o assunto, gradle é uma ferramenta de automatização equivalente ao maven ou ant sem as desvantagens do uso de xml, convenções extremamente inflexíveis, suas vantagens são: Dsl de projeto, ser voltada para projetos baseados na Jvm, possuir a velocidade e o hashing do git, poder da metaprogramação do groove, possuir convenção mas sempre com flexibilidade para mudanças! Parabéns a dupla gostei muito da palestra.

A ultima palestra da manha foi dada pelo Douglas Campos um desenvolvedor apaixonado por open source inclusive aconselhando fortemente seguirmos esse caminho, Douglas trabalha na Jboss e possui muito conhecimento em linguagens de baixo nível. Seu tema foi "InvokeDynamic Crash Course" , ele falou sobre como a jvm baseia-se em pilhas e que Java é uma linguagem limitada mas isso não é nenhum problema. Confesso que não poderei falar mais sobre a palestra por que boiei legal.

Após o almoço tivemos a primeira palestra com Otavio Santana e participação do Juggy um bonequinho que auxilia formulando perguntas e contando piadas ( bem inovador e divertido)  o seu tema foi "Desenvolvendo JEE persistindo com NoSql", alguns casos de sucesso do uso de NoSql são o twitter e o facebook. Otavio fez uma comparação entre o sql e o NoSql, sql é o carro utilitário ou seja serve pra tudo, enquanto o NoSql é um carro de corrida ou seja: muito rápido mas especifico. NoSql visa ser como um hospital ou seja estar sempre disponível, não usa drives somente a api isso faz dificultar a migração de BDs, pode ser configurado para armazenar dados tanto em memória como em disco com isso gerando um menor custo de I/O. NoSql faz busca somente pela chave e possui 4 modelos (Chave-valor,Documento,Grafo e Família de colunas). NoSql não possui relacionamentos.

A segunda palestra da tarde foi de um cara que sou suspeito em falar, pois foi quem me introduziu no java, Francisco Barroso com o tema "Cucumber testando aplicações java" , Barroso contou o por que mudar o teste de interface do seu trabalho do Selenium Ide para o Cucumber que é uma ferramenta desenvolvida em Ruby e possui uma linguagem muito legível tanto para o cliente quanto para desenvolvedores.

Terceira palestra da tarde foi dada por um ex-companheiro de trabalho Diogo Sousa "Simples pelo simples, google android RoboGuice , enfatizou o que na minha opiniao esta correto, 2012 será o ano do mobile no Brasil, explicou que o RoboGuice  é pouco usado pela comunidade de desenvolvedores de android . falou de cases de sucesso como Groupom e facebook. RoboGuice é um framework de D.I para android de código aberto e baseado no guice da google.

Leonardo Leitão abriu a quarta palestra com o tema "Rest nas nuvens"  e começou sua palestra dando uma explanação sobre Rest ( modelo arquitetural em cima do http ) explicou algumas qualidades de trabalhar com o Cloud, falou sobre Saas, Paas e Iaas,- Software as a service, Plataform as a service e Infrasctuture as a service. Enfatizou bem as vantagens do uso do amazon como provedor de nuvens porque o desenvolvedor so contrata o que quer e se a aplicação evolui em termos de acesso o provedor se adapta para tal, fornecendo Elastic load balance, Auto scaling  e Elastic compute cloud. Concluindo que  E2c+ elastic load balance + auto scaling como formula do sucesso.

Tivemos outra dupla na quinta palestra Carlos ViIllela e Gregorio Melo voltaram ao assunto de Bds  com o tema "Quebrando Relacionamento: Nosql, Redis e Hbase" , como ja tínhamos tido uma excelente palestra sobre NoSql os dois focaram no assunto Redis e Hbase, o Cv falou mais sobre redis que é sua praia e o Gregorio falou sobre Hbase.
Como uma característica do Redis e ser rápido e fácil de configurar porem limitado, e oque queremos dizer com limitado? Limitado a guardar dados que caibam na memória, possui String, List, Hash Set e Sorted Set  como tipo de dados e é atômico.
O Hbase não precisa de Dml nem Dll para o banco, usa timestamp para guardar as versões dos dados  já que não tem conhecimento das colunas, funciona com objeto parecido com o json. Resumindo Redis e bom para cache e Hbase para Search.
Um conselho valido e que não se resolve tudo com o uso dos bds já mencionados, se não tem certeza vá pro caminho tradicional Sql.

A ultima palestra do dia foi do Bruno Sousa o Javaman, na verdade não foi palestra, ele respondeu algumas perguntas sobre o futuro do java, como a briga da Oracle x Google e só uso do JavaMe.

Bem foi isso que rolou no primeiro dia, amanha escreverei um post sobre o segundo dia. Ate amanha.


segunda-feira, 23 de abril de 2012

O poder das Mídias Sociais

É inegável o crescimento das mídias sociais na internet, cada dia surgem diversas novas ferramentas que utilizam o conceito de mídias sociais, conceito esse que tem como uma das definições:
"Tratar-se da produção de conteúdos de forma descentralizada e sem o controle editorial de grande grupos." 
Mídias sociais se popularizaram com a chegada da WEB 2.0.  A característica de não ter nenhum controle editorial foi o trunfo para o crescimento das mídias, pois qualquer pessoa pode construir conteúdo de qualidade ou não e difundir usando o grande poder de compartilhamento que a internet proporciona. Existem diversas ferramentas desenvolvidas utilizando o conceito da WEB 2.0 entre elas cito youtube, Foursquare, Blogger, Wordpress, Facebook, Twitter, Fliker, Linkedin,Vimeo, JustinTv, LastFm.
Saber tirar o melhor proveito não é uma tarefa difícil, basta criatividade e senso para filtrar o que é bom e o que é lixo na rede.

Vou falar algumas maneiras de como conseguir  benefícios tanto no âmbito intelectual, profissional como ate para questão de diversão de algumas mídias conhecidas.

Começo pela minha rede favorita o Twitter, essa interessante ferramenta que incrivelmente conseguiu atrair milhares de usuários com uma ideia simples onde escreve-se geralmente o que está pensando ou fazendo em um texto de no máximo de 140 caracteres, consegue aproximar pessoas de outras partes do mundo sendo artistas ou não de maneira fácil e rápida. O twitter é a rede onde consigo me manter mais informado sobre a área de T.I assim como noticias de toda parte do mundo, é uma importante rede também para fazer o network com outros profissionais, trocar ideias, abordar temas e até descobrir mais sobre a rotina de trabalho de profissionais de outras empresas. Você seguindo as pessoas certas eu garanto que terá um enorme ganho intelectual.

Outra Rede que pode-se utilizar para difundir ideias é o já antigo Blog (WordPress, Blogger, etc)  importante ferramenta para escrever artigos e difundir suas ideias sejam elas no âmbito profissional ou pessoal,  importante ferramenta para marketing pessoal, o blog já conseguiu fazer muitas pessoas ficarem conhecidas por escreverem textos interessantes e com isso atraindo atenção de milhares de leitores, também  virou ferramenta de negócios a ponto de viverem e ganharem dinheiro escrevendo posts.


Foursquare  considero a ferramenta essencial para quem é empresário, tendo como beneficio maior a  divulgação da empresa e serviço, um  marketing bem feito pode trazer beneficios extraordinários para o estabelecimento, pois quem faz o Check-in automaticamente está fazendo uma propaganda boca a boca do local, e com isso podem ser criadas promoções ex: Um amigo lançou um bar em Fortaleza e para conseguir uma maior e mais rápida divulgação ele criou uma promoção que quem fizesse o check-in do bar dele ganhava outro chopp, assim conseguiu em pouco tempo um grande numero de clientes visitando seu bar.

Temos o Linkedin, importante para network profissional, com ele o usuario conecta-se com diversos profissionais alem de manter seu currículo visível para empresas do mundo inteiro, existem inúmeros casos de pessoas que foram contratadas ou contactadas porque alguém viu seu currículo profissional no linkedin e gostou. Eu mesmo já recebi diversos convites profissionais através dele.

Facebook essa considero a que devemos levar menos a serio, pois trata-se de uma ferramenta única e exclusivamente para entretenimento e conexão de pessoas, onde vemos todo tipo de assunto sendo difundido por ele, não podemos levar muitos conteúdos a serio e como beneficio temos o de mantermos em contato com amigos que raramente vemos ou para encontrarmos aquele amigo de colégio que havíamos perdido o contato.

CoachSurfing essa eu adoro, ela nada mais é que uma rede onde você se dispõe a hospedar uma pessoa na sua casa sem custo algum para ela, utilizada por mochileiros no mundo todo, ela funciona da seguinte forma, se você quer viajar por exemplo para a França, então você escreve que quer ir para lá e pergunta se alguém está disposto a recebê-lo, essa mensagem é enviada a todos os usuários que ficam na cidade que você estará indo, alguém se dispõe a recebê-lo em sua casa sem custo algum de hospedagem para você, e a recíproca  é verdadeira.

Bom isso é um pequeno resumo  do que podemos tirar de benefícios de algumas redes sociais existentes hoje na internet, lógico que existem inúmeras outras não citadas, todo dia surge uma rede nova tentando ser uma nova febre mundial. É importante também saber discernir o que é legal e o que é descartável nessas redes.

domingo, 12 de fevereiro de 2012

Impressões sobre o livro Introdução à arquitetura e design de software




Bom hoje terminei de ler o livro Introdução à arquitetura e design de software escrito pelo pessoal da Caelum, foi o livro de tecnologia que li em menor tempo, entre os motivos para tal feito destaco a didática utilizada pelo autores, o livro é muito gostoso de ler e de fácil compreensão, outro fator é que ele não é muito grande. São ao todo 232 páginas de puro conteúdo. Pode parecer que é superficial mas não é, o livro aborda muito bem alguns dos principais aspectos para desenvolver um software bem arquitetado e com ótimo design, mostrando diversos pontos positivos e negativos ao escolher certos caminhos no desenvolvimento.
O livro é todo baseado no Java e trata de aspectos que vão desde a JVM até  a Integração de sistemas Web e Rest.
Os capítulos que mais gostei foram o 3º - Tópicos de Orientação a Objetos, 4º- Separação de responsabilidades e o 6º- Decisões arquiteturais.

No capitulo 3 o livro fala de como programar orientado a interfaces e não á implementação deixando o código menos acoplado, como devemos buscar programar compondo comportamentos para nossas classes, devemos também evitar e herança e favorecer a composição como explicação de que herança força a classe filha a conhecer o comportamento da classe mãe, o que é visto como quebra de encapsulamento. Outro aspecto interessante nesse capitulo é quando indica a favorecer a imutabilidade nas classes fazendo com que não tenhamos problemas como a  perca de referencia dos objetos.

No capitulo 4 destaco como o livro trata e ensina a obter um baixo acoplamento e uma alta coesão utilizando técnicas de separação de responsabilidades, interessante também como defendem o uso de um Framework para injeção de dependências e inversão de controle, entre eles temos o Spring Framework, mas no JEE6 já temos a implementação do CDI - Context and Dependency Injection embutida na plataforma. O capitulo faz alusão aos Singletons  e como caiu em desuso chegando a ser considerado um anti-pattern  por possuir uma instancia unica, ele faz com que classes que precisem do acesso global de um singleton tenha um alto acoplamento.

O capitulo 6 explica a diferença entre Tiers e Layers conceitos bastantes confundido pelos Desenvolvedores.
Layers são as separações lógicas de como organizar o código da aplicação de maneira a diminuir o acoplamento e facilitar as mudanças, o MVC é um exemplo dessa separação.
Tiers já trata de separações físicas entre partes do sistema exemplo: servidor web e o banco de dados.
Outro assunto interessante é sobre Desenvolvimento Web MVC e qual tipo de abordagem devemos usar ao desenvolver um software Actions ou  Componentes, fazendo uma analise também de frameworks Action-based (Struts2) e Component-based  (Jsf).
Frameworks ORM também são muito abordados neste capitulo, mais precisamente o uso do Hibernate, explicando como tirar proveito de Caches de 1º e 2º níveis, diminuindo o acesso ao banco e ganhando performance.

Esses foram os tópicos abordados pelo livro que achei mais interessante compartilhar, mas vale ressaltar que o livro todo é bom, não tem um capitulo que não dê para tirar proveito e enriquecer seu conhecimento. Aconselho a quem não tem adquiri-lo, tenho certeza que terão uma outra visão quando forem desenvolver algum software, até porque é um livro de certa forma barato pelo quanto de valor ele ira agregar ao profissional que o tiver.

Endereço na Web do livro: http://www.arquiteturajava.com.br/