Friday, May 18, 2007 5:59 PM

 

Durante a fase de design e desenvolvimento de software é natural seguirmos uma ordem de etapas. O mais comum, que muitos aprendem na faculdade e praticam no dia-a-dia é:

  1. definir o modelo de dados
  2. construir a camada de negócios
  3. criar a interface do sistema

A lógica por trás desta ordem é que a camada de dados deve ser a mais consistente e menos mutável do sistema. O custo de alterar o banco de dados é alto e existe risco de perda de dados. Em seguida é criada a camada de negócios e por último a interface com o usuário, pois esta é mais suscetível a mudanças e é “apenas” uma apresentação dos dados, que pode ser mudada rapidamente.

Eu tive um professor de modelagem de dados que fazia lavagem cerebral nos alunos convencendo todos de que a modelagem de dados era o passo mais importante e, portanto deveria ser o primeiro durante o projeto. Acho que todo professor de modelagem de dados é assim.

Agora vou “sair da caixa” e inverter a ordem das coisas. Se a camada de dados é mais difícil de se modificar seria melhor se eu pudesse postergar ao máximo a definição do modelo de dados. A cada dia que passa no projeto ganhamos um pouco mais de conhecimento para modelar melhor. Não quer que você irá atrasar a etapa e ficar a vida toda “fazendo carinho” no modelo de dados, muito pelo contrário. A idéia é desenvolver a camada de negócios e amadurecer o modelo de dados no processo.

Um dos princípios do Lean Software Development é: Decide as late as possible. Em uma realidade incerta atrasar decisões é interessante pois quanto mais informação melhor será sua decisão. Deixar opções em aberto, como por exemplo qual ferramenta de integração ou qual camada de persistência será utilizada, também deixa a arquitetura mais aberta a mudanças. Um benefício extra.

Para fazer isto é necessário isolar muito bem as camadas e utilizar técnicas de teste unitário e mocking para ser capaz de evoluir no desenvolvimento da camada de negócios, substituindo a camada de dados por uma camada provisória durante o processo. O Domain Driven Design Quickly, de Eric Evans, mostra alguns patterns interessantes para isto.

E a UI? Onde ela ficou? No livro Getting Real, o pessoal da 37 signals sugere que a UI deve ser desenvolvida antes de qualquer coisa. Segundo eles o custo de mudar a UI em tempo de protótipo é baixo, além disto é prático para discussões com usuários e clientes.

Outra alternativa é desenvolver a UI em paralelo com a camada de negócios, funcionalidade a funcionalidade. O importante, neste caso, é ter mente o princípio do Agile Manifesto: Deliver working software frequently. Desta forma a resposta do cliente/usuário é mais rápida e mais fácil fica absorver as mudanças necessárias.

Comments

At 5/21/2007 1:30 PM, Leonardo Lima said:

# re: Ordem fatores altera o produto, pelo menos se ele for software

Concordo plenamente, e diria mais. Quando a gente desenvolve a UI primeiro e mostra para o cliente, mesmo com funcionalidade parcial, ele normalmente nos fornece feedback que muitas vezes, mas muitas vezes mesmo, nos faz repensar até a forma de desenvolver o bloco de negócio que está associado aquela interface ou característica, como por exemplo fazer a codificação manual ou usar workflow. O fato principal é que o cliente deve estar o mais próximo possível do desenvolvimento para que até mesmo aprenda o custo de uma mudança.
At 5/22/2007 5:34 PM, Eduardo Miranda said:

# re: Ordem fatores altera o produto, pelo menos se ele for software

Leornardo,

É isto mesmo. Até mesmo o modelo de dados pode mudar com o feedback do cliente. Desde um campo que o usuário esqueceu até um campo que parecia ser 1 para 1, mas é 1 para N.
Post Comment
Title *
Name *
Email (never displayed)
Website
Comment * (Allowed tags: blockquote, a, strong, em, p, u, strike, super, sub, code)  
Please add 4 and 4 and type the answer here: