Mostrando postagens com marcador desenvolvimento. Mostrar todas as postagens
Mostrando postagens com marcador desenvolvimento. Mostrar todas as postagens

quarta-feira, 14 de julho de 2010

Arquitetura para o DDD

Continuando a série sobre o Domain Driven Design iniciada aqui, vamos agora comentar sobre como arquitetar as camadas da aplicação de modo a utilizar um Domain Model rico como a "base" do desenvolvimento.

Antes de mais nada, convém salientar que essa não deve ser vista como a única arquitetura que existe e que irá atender a todos os sistemas e situações do mercado. Trata-se apenas da arquitetura mais adequada a um projeto que trabalhe sob as premissas do DDD.

As camadas são representadas como abaixo:




Explicação sobre as camadas:



É importante dizer que não considero a camada Application como mandatória; ela é criada apenas se realmente adicionar valor à aplicação. Como a camada Domain é bastante rica em funcionalidades, muitas vezes não é necessário implementar mais essa divisão.

A criação de um Domain Model  traz uma série de vantagens para aplicações de larga escala e/ou complexas. Como bem disse Martin Fowler em PoEAA: "se você utilizar DDD para um projeto, você provavelmente irá cogitar utilizar a mesma técnica para outros (mesmo para os pequenos)."

Um design focado na criação de um Domain Model tem melhor manutenção no longo prazo devido à clareza da relação entre o negócio e a implementação. Além disso, é uma importante ferramenta para evitar a duplicação de código. Também aumenta a testabilidade do sistema.


segunda-feira, 5 de abril de 2010

Como trabalham os desenvolvedores profissionais?


Esses dias estive pensando a respeito de práticas de programação que são comuns a todos os desenvolvedores profissionais que conheço. Apesar de haver estilos e características diferentes em cada um deles, há um conjunto de atividades que eles compartilham quase sempre. Portanto, resolvi agrupar uma "lista" dessas atividades principais e divulgá-las aqui no blog.

Vamos à lista:

Desenvolvedores profissionais...


Estudam muito, sempre. 

Eles bebem de várias fontes. Fazem cursos, leêm as obras mais relevantes da área, frequentemente conhecem mais de uma linguagem (e plataforma), gostam de "fuçar" para obter mais conhecimento e estão sempre praticando e testando novas ideias. Para esses profissionais, o importante é aprender sempre e estar  em constante evolução. 


Gostam de compartilhar conhecimento. 

Desenvolvedores profissionais, geralmente, são membros ativos de blogs, grupos de discussão e comunidades. Ajudam seus colegas de trabalho a entenderem técnicas e conceitos importantes, disseminando o conhecimento por todos da equipe. São definitivamente pessoas altruístas e com grande sentimento de colaboração e cooperação. 

Escrevem seus próprios testes.

Desenvolvedores profissionais escrevem seus próprios testes. Como Phillip Calçado expôs nesse excelente post , é bobagem achar que um desenvolvedor profissional não deva produzir seus próprios testes unitários automatizados. Pior ainda é considerar que ninguém deva produzir esses testes alegando questões de prazo e/ou custo. Leia esse post do José Papo e entenda por que isso é um contra-senso  econômico.

Escrevem código para pessoas e não para máquinas.

Qualquer um pode escrever alguma coisa que compile e funcione. Entretanto, somente os profissionais escrevem código limpo, claro e organizado que pessoas conseguem entender e manter. O design é feito pensando nos outros programadores - os que irão passar a maior parte do ciclo de vida do sofware mantendo o produto.

Refatoram de forma disciplinada e habitualmente. 

Na vida real todos nós sempre temos um prazo e um budget. Desenvolvedores sérios sabem disso e são comprometidos com as necessidades de seus clientes. Para respeitar esse prazo, muitas vezes entregam uma solução que ainda não consideram como "excelente" e, para resolver esse problema, assumem e se responsabilizam pelo "débito técnico" gerado, refatorando o código de forma habitual e controlada (obviamente, sempre possuem uma suíte de testes automatizados para tornar a tarefa possível).

Evoluem com o design tendo o business em mente.


Desenvolvedores profissionais criam soluções, de forma incremental, que reflitam o negócio da empresa (e do cliente) em primeiro lugar. Desenvolvedores sérios trabalham com técnicas que facilitem a criação de uma aplicação que contenha elementos comuns a todos os stakeholders do projeto da organização. Geralmente indicam o livro do Eric Evans, "Domain Driven Design", como leitura  obrigatória (e realmente considero um excelente livro).


Enfim, essas são as atividades que considero comuns aos desenvolvedores profissionais. Servem como uma "luz" para o nosso próprio desenvolvimento profissional.

E você? Acredita que há mais atividades importantes?

Comente...

sexta-feira, 19 de março de 2010

As 10 melhores práticas para se construir software.

1 - Desenvolva uma visão do produto.

2 - Trabalhe de modo iterativo e evolutivo.

3 - Envolva o cliente no processo.

4 - Gerencie requisitos.

5 - Acolha mudanças.

6 - Construa o design e a arquitetura incrementalmente.

7 - Diminua o tempo de feedback.

8 - Gerencie riscos.

9 - Aplique técnicas de engenharia.

10 - Confie na equipe.
Related Posts with Thumbnails