Uma coisa que coloco com razoável frequência quando um cliente me pede revisão de arquitetura é que o código não tem expressividade. O que isso quer dizer? Quer dizer que você lê o código e não entende o que está acontecendo; não entende o propósito do código.

A Ubiquitous Language do DDD já ajuda bastante, pelo menos no que diz respeito a nomeação de classes e seus membros públicos. Mas muitas vezes os membros internos das classes, como métodos e variáveis privados, continuam tendo nomes sem expressividade. O código dentro dos métodos continua sem expressividade, ainda que a interface do objeto seja expressiva.

E mesmo utilizando com a Ubiquitous Language dá para bagunçar bastante. Não basta usar a linguagem do negócio no código se você acabar misturando ou adaptando os conceitos.

Então o cliente me chama para revisar a arquitetura e acaba ouvindo que o código dele não tem expressividade e que ele precisa nomear melhor seus objetos (claro que essa é só uma das observações, entre várias outras). E isso geralmente é um assunto que pega bastante, porque boa parte dos desenvolvedores tem o ego maior que o próprio conhecimento e acha que a sua maneira de fazer as coisas é melhor, principalmente na hora de nomear classes, métodos, propriedades e eventos.

Isso faz diferença? Faz. Faz muita diferença. Código que não dá para entender entra de cara na categoria de código legado. Não importa se você escreveu hoje de manhã, se não dá para entender é código legado. Código que não é legado deve ser compreensível. Como vou conseguir compor a arquitetura de uma solução se os objetos têm nomes como "BSCliente", ou "FrmCadastro", ou "ItemSelecao"? Impossível. Quer dizer, não é impossível, porque a primeira coisa que eu vou recomendar é justamente ajustar estes nomes, aí sim vamos conseguir tentar entender o que está acontecendo.

O interessante é que o desenvolvedor, conforme começa a revisar o nome dos objetos, começa a perceber que há um monte de conceitos errados, que o princípio de responsabilidade única está quebrado em tudo quanto é lugar, que há repetição de responsabilidade, entre outras coisas. Aí então começa a entender o que eu estava propondo.

Li um tempo atrás um post do MVP Greg Young chamado "DDD: Specifications, Language, and Locality". Neste post o Greg, que posta frequentemente no grupo de discussão sobre DDD (infelizmente todo em inglês, mas você pode obter experiência semelhante indo ao grupo online do .Net Architects, todo em português), coloca um exemplo interessante do uso de especificações versus propriedades. Muita gente me pergunta quando e onde usar especificações, e o Greg coloca com bastante propriedade onde, quando e porquê. Além de um bom exemplo com especificações, é também um ótimo exemplo de utilização da Ubiquitous Language para aumentar a expressividade do código, e ela entre fundo nas explicações do porquê.

Em resumo: leia o seu código quando você terminar de codificar. Se você perceber que há nomes que não explicitam o que você queria dizer quando escreveu o código pense em renomeá-los.


Postado na(s) categoria(s) Arquitetura pelo giovanni bassi em 18 de janeiro de 2009 às 17:36 | Tags: ,

Comentários


março 2. 2009 16:57
pingback
Pingback from blog.rodrigoallemand.com.br

Padrões de Projeto e Expressividade de Código - Rodrigo Allemand

http://blog.rodrigoallemand.com.br/?p=129http://blog.rodrigoallemand.com.br/?p=129

Comentar


(Vai mostrar seu Gravatar)

  Country flag

biuquote
  • Comentário
  • Pré-visualização
Loading



Quem é Giovanni Bassi

Giovanni Bassi Sou uma pessoa apaixonada por tecnologia e especificamente por .Net. Sou consultor independente especialista em .Net, focado em arquitetura e melhores práticas. Tenho dezenas de artigos publicados na .Net Magazine, revista da qual sou editor técnico. Ministro palestras e cursos de vez em quando, e quando dá tempo eu respiro um pouco. Mais detalhes nesta página.

Busca

Selos

Eu vou ao TechEd Brasil 2010, e você?

MVP

MCPD

MCSD

.Net Magazine

Abaixo ao if!

Calendário

«  setembro 2010  »
seteququsedo
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910
Ver detalhamento de posts no calendário

Blogs interessantes

    OPMLDownload OPML file

    Postagens recentes

    Comentários recentes

    Disclaimer / Aviso
    As opiniões colocadas neste blog são minhas e pessoais e não expressam necessariamente as opiniões de meus empregadores, pareceiros e amigos. Da mesma forma, os comentários feitos por leitores do blog não expressam a minha opinião.

    © Copyright 2010 .Net Unplugged
    Log in