Artigos
Comentários

Domain Driven Design - Quando o gavião come a barata?

Há algum tempo (mais ou menos 4 anos) venho estudando e aplicando Domain Driven Design em diversos projetos. Normalmente meu trabalho nos projetos é planejar e construir a arquitetura dos sistemas ou avaliar e corrigir arquiteturas criadas por outras pessoas. Não precisa nem dizer qual dos dois eu prefiro né?

Para que eu possa expressar melhor o motivo que me levou a especialização em Domain Driven Design preciso voltar ao meu primeiro curso de Orientação a Objetos. Lá estava eu (há 7,5 anos atrás) com experiência em linguagens como C, Pascal, Object Pascal (Delphi), mas sem nenhuma noção do que era um "objeto". Após uma breve explicação dos conceitos, vieram os exemplos de meu professor:

image

Lê-se: "Gavião é uma Ave que é um Vertebrado que é um Animal" e "Barata é um Inseto que é um Invertebrado que é um Animal".

Quando eu comecei a entender essas relações eu imediatamente comecei a pensar nas diversas interações entre esses objetos. E comecei a pensar em como expressar as situações utilizando esses objetos. Como exemplo, pense na seguinte situação:

"O Gavião normalmente come a Barata."

Uma forma de expressar isso em orientação a objetos seria:

image

Que resultaria em :

image

Pronto… código muito simples e de fácil compreensão. Isso não passa de orientação a objetos. O importante é entender a quantidade de práticas envolvidas neste exemplo e que só pude perceber depois que comecei a estudar Domain Driven Design.

O processo

Implementar Domain Driven Design implica modificar a cultura de desenvolvimento de software que hoje está impregnada nas maioria das empresas. Domain Driven Design significa desenhar software de acordo com o domínio (conjunto de informações e situações) relacionado ao problema que o software se propõe a resolver.

Esse domínio deve ser definido já no começo do projeto, pelo menos de forma superficial, para que você saiba o objetivo do software. Depois disso começa o aprofundamento no domínio. É importante lembrar que sua arquitetura e seu ambiente de desenvolvimento deve preparado para evolução, protegido por integração contínua e TDD para garantir a evolução do domain. Práticas de desenvolvimento ágil são muito úteis para isso.

Em algum momento na caminhada iremos começar a desenvolver software e consequentemente trabalhar com o domain, aprofundando o conhecimento da equipe. Existem algumas dicas para obtenção do conhecimento, exploração de conceitos ocultos e implicitos, para garantir que o domain reflita a situação em um nível aceitável.

O fator fundamental é dialogar muito com os domain experts (pessoas que possuem experiência no processo de negócio do qual o domain trata). Sem os domain experts não é possível realizar domain driven design (Alguém ve alguma semelhança com agile?) São eles que vão determinar quais são as informações e situações que o domain deve tratar. Isso exige postura por parte de quem desenvolve, já que a pessoa que desenvolve deve ser a mesma que irá obter o conhecimento.

Voltando ao nosso exemplo, a frase "O Gavião normalmente come a Barata." representa uma explicação ou definição do domain expert e portanto deve fazer parte do domain. Essa situação de negócio pode ser expressada graficamente da seguinte forma:

image

Esse é um exmplo simples, mas com esse tipo de notação pode-se expressar processos de negócio complexos, o que ajuda muito na visualização do domain. É importante observar que nesta notação bem simples, temos todos os conceitos explicitos. Isso nos dá o gancho para o próximo item que é a criação de uma linguagem comum para o time.

Ubiquitous Language

Um importante conceito do Domain Driven Design é a criação e manutenção de uma linguagem comum, tanto para o cliente quanto para o time de desenvolvimento. A premissa diz que ambos devem expressar o negócio da mesma forma e isso visa melhorar a comunicação e o entendimento entre as partes.

Essa linguagem comum deve estar presente no dia-a-dia da equipe incluindo a obrigação de ser expressada em documentos e no código também. No nosso exemplo o código expressa exatamente o conceito antes comunicado pelo Domain Expert (a frase "O Gavião normalmente come a Barata." ), comunicada pelo diagrama:

image

Isso é conseguido através de algumas técnicas de Supple Design (um dos mais interessantes conceitos de Domain Driven Design) e é facilitado com a aplicação da técnica de Fluent Interface.

Refactoring

Pensando na situação do exemplo, "O Gavião normalmente come a Barata" nos deixa com muitas dúvidas sobre esse contexto. De onde veio a barata? De onde veio o gavião? O que acontece quando o gavião come a barata? O que o domain expert quer dizer com "normalmente"? Onde está o wally?

Podemos aprofundar nosso conhecimento a partir do momento que o domain expert responder essas perguntas. Mas essas perguntas podem gerar novas perguntas e  consequentemente, mais conhecimento a ser expressado. Continuando no exemplo:

Pergunta de desenvolvedor:

- Por que você (o domain expert) diz com "O Gavião NORMALMNETE come a Barata"? O que quer dizer "normalmente"?

Resposta do Domain Expert:

- O Gavião normalmente come a barata, mas tem vezes em que a barata consegue escapar do gavião.

Pergunta de desenvolvedor:

- Então a barata luta para não ser comida?

Resposta do Domain Expert:

- Sim. A barata tenta se esconder na hora em que o gavião começa a sobrevoa-la. Se a barata escapa então o gavião procura outra presa. Se a barata não consegue então o gavião come a barata. Mas isso é tão obvio que eu nem falei antes.

Nesse momento nosso conhecimento sobre o processo de negócio é mais profundo. Isso exige um refactoring em nossa ubiquitous language. Devemos modificar os documentos, a forma de falar, os diagramas e o código. Vejamos como ficaria nesse caso:

image

Nesse pequeno exemplo pudemos identificar a variação entre um conceito solto do processo e um pequeno detalhe "óbvio" que o domain expert não mencionou porque era obvio. Quantos problemas você já enfrentou porque deixou passar algum "detalhe óbvio"? Agora que temos o processo de negócio refatorado podemos partir para a implementação do código:

image

Percebam que na hora de implementar o código, vários detalhes aparecem (as ações gaviao.comeu?() e  gaviao.caçar()). Por isso é fundamental que o dialogo com os domain experts sejam constantes. O conhecimento evolui e nossa imaginação pode dar direções diferentes para uma situação, por isso validar o conhecimento com o domain expert é muito importante. Além disso podemos melhorar a implementação desse código (técnicamente falando) de várias formas. Talvez o do…while não seja a melhor opção para expressar este caso. Isso deve sempre ser realizado em inspeções de código, trazendo uma visão de fora para verificar a clareza e eficiência do código. Alguém se dispõe a otimizar esse algorítimo?

Conclusão

Praticar Domain Driven Design é algo deve ser feito em equipe, com foco em negócio e nas situações do ponto de vista dos domain experts. O DDD foca em expressar negócio em forma de software para que possamos minimizar complexidade desnecessária e consequentemente custos de produção e manutenção. A orientação a objetos, apesar de um conceito isolado ao DDD, vem para ajudar na implementação de um bom design orientado a domínio. O DDD por outro lado oferece um processo que facilita muito a aplicação de Orientação a Objetos na forma mais pura e por isso eu costumo dizer que Domain Driven Design oferece a nós desenvolvedores um caminho de volta à orientação a objetos. Confiram em breve mais artigos sobre DDD e sua práticas aqui no blog. ;-)

Blog Visão Ágil

Neste post eu gostaria de homenagear a iniciativa do Manoel Pimentel em criar um blog para a Visão Ágil. Para quem não conhece a Visão Ágil é a única revista eletrônica gratuíta para temas relacionados a desenvolvimento ágil de softwares, e vai indo muito bem obrigado. =) Eu tive o prazer de acompanhar o nascimento desta revista quando ela ainda era apenas uma idéia. Pude opinar no primeiro rascunho da revista.

A Fratech mantém um relacionamento muito bom com essa revista já que hoje ela está hospedada no mesmo servidor do site da Fratech além de eu escrever artigos regulares para a mesma. Temos o orgulho de dizer que apoiamos essa iniciativa que só vem a fortalecer a comunidade de agile no Brasil.

Para conhecer melhor os autores, assuntos relacionados e novidades sobre a revista, há 3 maneiras.

  1. Grupo de discussão no yahoo http://br.groups.yahoo.com/group/visaoagil/
  2. Website da revista http://www.visaoagil.com
  3. Blog da visão ágil http://visaoagil.wordpress.com

Além disso, tenha certeza de que leu as 4 edições da revista que ao meu ver está fazendo história na disseminação de metodologias ágeis no Brasil. Um boa leitura para todos vocês!

Chamada de Trabalhos para a InfoQ Brasil

Como foi noticiado no post Agora é Oficial - InfoQ Brasil em Setembro de 2008 a Fratech assinou um contrato com a C4Media para a administração do portal InfoQ no Brasil.

Dessa forma, com uma visão mais elaborada sobre o trabalho a ser realizado, solicitamos a todos os interessados em tornar-se editor da InfoQ Brasil ou que deseje ajudar de alguma forma, a enviarem um email para infoq@fratech.net descrevendo como você quer ou pode ajudar.

Dentre as atividades de um editor, esperamos proatividade em buscar conteúdo e cobrir eventos, realizar entrevistas, liderar grupos de discussão regionais e ajudar na tradução de conteúdo do site principal para a versão em português.

A nossa intenção é conseguir pelo menos um representante para cada região do brasil e para cada track do site: Java, .Net, Agile, SOA, Ruby, Architecture. Após termos os nomes dos interessados, iremos iniciar a divisão dos trabalhos e serem feitos.

Ocorreu no último sábado, dia 05 de Julho de 2008, nas dependências da Faculdade Anhembi Morumbi (Campus Vila Olímpia) na cidade de São Paulo(SP), o workshop Scrum Implementation for Project Management, organizado pela Fratech e com o apoio da Revista Visão Ágil.

Apesar de sermos suspeitos de falar, esse workshop superou nossa expectativa nos feedbacks dos alunos, pois conseguimos passar de uma maneira prática e clara a proposta de conteúdo da aplicação de Scrum para o gerenciamento ágil de projetos.

Na verdade o grande segredo do sucesso dessa turma foram os próprios participantes do mesmo, pois era um público bem equilibrado, com bastante experiência em gerenciamento de projetos de software e estava realmente interessado em tirar dúvidas e promover bons debates sobre Scrum de maneira geral ou como aplicar as suas práticas para requisitos, planejamento, estimativas, desenvolvimento, métricas, acompanhamentos, melhoria contínua e a sua relação com outros modelos como CMMi, MPs.BR e PMBok.

No mais, foi uma felicidade muito grande ministrar esse workshop e tenho certezaque haverá muito outros workshops desse no melhor estilo Fratech de ser.

PICT0126 - PICT0126

Veja mais fotos do evento em:
http://picasaweb.google.com.br/manoelp/WorkshopScrumImplementationJulho2008

Agora é Oficial - InfoQ Brasil em Setembro de 2008

Na última quarta-feira foi oficializada a parceria entre a Fratech e a C4Media, empresa responsável pela administração do portal InfoQ.com. A parceria é fruto da sinergia entre a C4Media e a Fratech e foi consolidada durante alguns meses de negociação. A idéia do InfoQ Brasil faz parte do programa de regionalização da comunidade infoq. Esse programa teve início com a InfoQ China e posteriormente InfoQ Japão, chegando no Brasil através da Fratech.

Para quem não sabe, o intuito do portal InfoQ é oferecer notícias e informações sobre várias ramificações do desenvolvimento de sistemas corporativos. Para isso conta com as Comunidades  Java, .NET, Ruby, SOA, Agile, Architecture. Dessa forma a InfoQ Brasil seguira as mesmas diretrizes, com a responsabilidade de gerar conteúdo para o público brasileiro e internacional através de tradução, além de traduzir o conteúdo disponível no portal principal para o português.

O trabalho começou. Atualmente estamos traduzindo um dos free books para português e nas próximas semanas montaremos um time de edição e tradução (aguardem a chamada de trabalho) dos artigos e notícias originais. O trabalho de tradução deve preparar o InfoQ Brasil para ser lançado ao público aberto em meados de Setembro de 2008. A Fratech também é responsável por centralizar as negociações com patrocinadores, fato que ajuda a manter a infraestrutura do portal.

Acreditamos sériamente no potencial da comunidade brasileira para produzir conteúdo de qualidade e com responsabilidade. Acreditamos que essa iniciativa irá fortalecer ainda mais o desenvolvimento de software com qualidade no Brasil. Acreditamos ainda que iremos colaborar para um desenvolvimento de mais qualidade, resultando em satisfação para o público brasileiro.

Aguardem mais novidades…

Quando a Fratech teve a iniciativa de disponibilizar o Workshop de Domain Driven Design em São Paulo, tivemos algumas pessoas perguntando se tínhamos intenção de realizar esse mesmo workshop em outras cidades do Brasil. Tivemos pedidos para realização do workshop em Curitiba, Florianópolis, Fortaleza, Belo Horizonte, Rio de Janeiro, etc. Diante dessa possibilidade a Fratech decidiu atender às solicitações e arriscar realizar uma turma em Curitiba.

O objetivo, além do workshop em si, é ter uma idéia de como o mercado se comportar fora de São Paulo, já que nossa base de cliente é muito centralizada. Vemos também essas turmas, como um início de abertura de mercado para a Fratech nessas regiões. Dessa forma começaremos com o workshop de Curitiba e dependendo dos resultados vamos expandindo para outras regiões. Os workshops fora de São Paulo ficam um pouco mais caros, pois custam mais para serem realizados (no caso da Fratech). Além disso o risco de uma turma não "lotar" é bem maior. Vale lembrar também que há uma quantidade mínima de inscrições para tornar o evento viável.

Além dos óbvios benefícios para a Fratech, vemos essa iniciativa como vantajosa também para a comunidade, que poderá contar com treinamento em assuntos modernos e atuais à um custo acessível e perto de casa. Os participantes não precisarão se deslocar até São Paulo para aprender. Dessa forma, peço a todos que se identificarem com a iniciativa que nos ajudem a divulgar. Ainda, se tiverem interesse, tornar-se um promoter dos eventos da Fratech em sua localidade. Para mais informações de porque ser um de nossos promoters, envie um email para fratech@fratech.net.

Mais informações acesse www.fratech.net

Mais um workshop realizado com sucesso pela Fratech. Dessa vez ocorrido nos dias 13 e 14 de Junho, pudemos contar com a presença de 28 pessoas muito interessadas nos assuntos abordados.

O conteúdo aplicado foi mais uma vez revisto e aprimorado, oferecendo ao participantes um material atualizado. O ponto forte desta turma foi a iteração. Debates constantes e muito ricos puderam mostrar que a turma era composta por excelentes profissionais, fato que apenas contribuiu para a qualidade do workshop. Dessa vez contamos com profissionais da Locaweb, ObjectData, Prodam, CPM Braxis entre outras.

Participantes:
Participantes

Os temas abordados não são simples de serem explicados, porém conseguimos aplicar todos os conceitos na prática e percebemos um bom entendimento nos participantes. Através de um exemplo, os participantes puderam consolidar os conhecimentos adquiridos e conviver com as dificuldades básicas presentes na hora de implementar as técnicas. O Manoel Pimentel e eu preparamos algumas surpresas ao longo do workshop para tornar o exemplo mais interessante e, acredito que conseguimos. A sensação era de que o projeto era real, com todos os problemas e dificuldades.

Mãos na massa:
Mãos na massa

Da minha parte, fiquei muito satisfeito com esses dois dias, pois pude conhecer algumas figuras interessantes e aprimorar meus conhecimentos como sempre acontece. Acredito que fiz alguns amigos e apesar do trânsito horrível de São Paulo me diverti muito.

Um fato interessante foi a procura por esse workshop. Nossa idéia era esperar um pouco mais para disponibilizar outra turma, porém, a procura continua e como vemos uma carência deste tema no mercado, estamos iniciando um tour por algumas cidades para realização deste workshop. As próximas turmas serão acontecerão em Curitiba (Julho) e São Paulo (Agosto). Fique atento ao site da fratech para mais informações.

Veja mais fotos…

Dynamic Typing - Capability versus Contract - Parte 1

Há algum tempo tenho sido um pouco mais que um simples curioso sobre a diferença CONCEITUAL entre as tipagem dinâmicas e estáticas.

Cada vez mais as pessoas tem se interessado por linguagens menos restritivas e com tipagem dinâmica. Esse fenômeno tem sido testemunhado por todos nós quando ouvimos falar sobre Ruby, Groovy, Phyton, ActionScript, JavaScript, Erlang, Lisp, Lua, etc.

Esse fenômeno tem se reforçado com a “novidade” que é o suporte a esse tipo de linguagem nas plataformas mais “robustas” ou pelo menos mais consolidadas no mercado corporativo, como a plataforma Java e .Net. Cada vez mais linguagens são suportadas por essas plataformas que são sinônimos de tecnologia nas empresas. Isso faz com que os desenvolvedores sejam atraídos por novos paradigmas e novas práticas de desenvolvimento extremamente baseados em Metaprogramação.

Metaprogramação significa escrever programas que manipulam programas e isso inclui manipular a si próprio. Imagine o poder de adicionar métodos em um objeto quando você bem entender? Não precisar especificar os tipos de variáveis e também ter a certeza de que tudo no seu código é um objeto, incluindo os métodos. Isso seria bom? Vamos analisar essa questão um pouco mais a fundo.
Leia o restante deste artigo »

Nosso workshop de Modelagem Ágil e DDD - Maio de 2008

No final de semana passado (16 e 17 de Maio de 2008), nós da Fratech (Felipe Rodrigues e Eu), ministramos nas dependências da faculdade Anhembi Morumbi em São Paulo(SP), o workshop de Modelagem Ágil e DDD (Domain-Driven Design).

Esse evento, nos deixou muito contentes, pois conforme alguns comentários (http://vp.blog.br/2008/05/17/workshop-modelagem-agil-ddd-em-sampa-day-1/ e http://www.brunocarvalho.com/category/eventos/ ) o workshop teve uma ótima avaliação pelos participantes.

Outro ponto importante, foi o nível dessa turma, pois o alunos já tinham muita experiência com projetos de software em importantes empresas como Globo.com, TOTVS, Imagem, IBM e Petrobrás, por isso, as atividades práticas fluíram de forma divertida e com um excelente nível de participação nos debates de idéias, fazendo com que o evento, tivesse um bom aproveitamento e grande contribuição para a construção mútua de conhecimento.

Por isso, nós da Fratech, estamos muito felizes, pois semelhante aos workshops do JavaBrasil (Em Campinas-SP) e da UNIVEL (Cascavél-PR), tivemos uma grande procura por esse evento, inclusive, já temos um número significativo de pessoas inscritas para a próxima turma que será realizada nos dias 13 e 14 de Junho de 2008, portanto, se estiver interessado em aprender a planejar, modelar e desenvolver software de forma produtiva e elegante, veja mais informações em: http://www.fratech.net/

Foto do evento:

Ver Mais Fotos…

Porque ir à um workshop da Fratech?

A Fratech mais uma vez inova em seus serviços e traz para São Paulo o workshop Modelagem Ágil e Domain Driven Design. O objetivo é disseminar o conhecimento das boas práticas há tempos praticadas por nossos profissionais ao longo de diversos projetos. Os temas deste workshop foram escolhidos cuidadosamente de forma que um complemente o outro. O workshop ocorrerá nos próximos dias 16 e 17 de Maio, no Campus 6 da Universidade Anhembi Morumbi na Vila Olímpia em São Paulo.

Domain Driven Design é um conjunto de técnicas reunidas pelo livro Domain Driven Design (Evan, Eric – Addison Wesley - 2004). Neste livro, o autor narra várias situações problemáticas e apresenta como solução as técnicas que compõe o Domain Driven Design. Kent Beck disse: “Este livro em sua essência, pertence à todo desenvolvedor de software que se preze.” .

O foco inicial é como o Domain Driven Design pode ajudar a construir sistemas mais condizentes com os valores do cliente. Focar no negócio em questão é a essência do desenvolvimento orientado a objetos. Permitir a abstração do mundo real, expressando a iteração real em objetos e operações é o que torna a orientação a objetos tão poderosa.

Há quem diga que as empresas dificultam o desenvolvimento de boa qualidade, pois pregam velocidade e baixo custo, trazendo desmotivação para os desenvolvedores. Há também as situações em que o time não está preparado para a “qualidade técnica” de alguns arquitetos, que rebuscam cada vez mais as suas soluções, forçando os meros mortais a utilizarem soluções demasiadamente complexas para atender às regras de negócio.

Eu vejo que os clientes estão certos, ao querer baixo custo, pois a maioria das empresas não tem por objetivo desenvolver software e sim obter lucro para seus acionistas. Com um custo alto isso se torna inviável. Dessa forma, cabe ao desenvolvedor achar soluções que atendam as necessidades de forma simples e objetiva, diminuindo a qualificação necessária para fazer parte da equipe e, conseqüentemente diminuindo o custo. Além disso, um software bem estruturado oferece facilidade de manutenção e melhora a comunicação com o cliente, resultando em mais qualidade em menos tempo.

Outro fator interessante é a visibilidade que seu trabalho ganha, quando o foco é o negócio. Os clientes sempre olham para o negócio, o que faz com que nem sempre vejam valor em solução técnicas muito bem elaboradas, porém sem foco e objetivo de negócio. Ao ganhar mais visualização, o cliente não se importará em pagar mais caro, ou mesmo em criar uma situação de confiança.

Uma dificuldade que os desenvolvedores encontram para realizar essa tarefa é como expressar de forma prática a solução. Em alguns casos, 80% do projeto é gasto apenas para se desenvolver documentos e planos que na grande maioria das vezes, tornam-se inúteis antes do final do projeto, ficando obsoletos diante da dinâmica de um projeto de software.

Mas nem tudo está perdido. Cada vez mais os gerentes de software estão se inclinando aos métodos ágeis de desenvolvimento como SCRUM, XP, FDD, etc. Por isso é importante que os documentos sejam práticos e condigam com os métodos aplicados. Como documentar de forma ágil? Como expressar algo tão complexo sem deixar nada passar?

O tema de modelagem ágil, mostra como podemos modelar software de forma prática e indolor. Nessa segunda parte do workshop, mostraremos como utilizar os conceitos de Domain Driven Design e expressá-los utilizando Modelagem Ágil.

Se você quer saber como desenvolver melhor em menos tempo e ainda deixar o cliente feliz com o trabalho realizado, não perca tempo, inscreva-se já, pois as vagas são limitadas.

Clique aqui para ver informações sobre o Evento!

- Próxima Página »