[quote=YvGa][quote=sergiotaborda]
Agora vc fala que é impossivel ter uma epifania para encontrar esse modelo primogénito. Aceitando que isso é verdade, é por isso que existem tecnicas como TDD que são usadas antes de planejar as iterações ( aquilo que se chama iteração zero). Em agil vc pode alocar quantos sprints quiser para achar o modelo que statisfaz todos os requisitos conhecidos, mas para cada sprint vc terá uma meta a alcançar. Apenas Scrum - porque é um processo que sublinha muito fortemente foco é que vc é obrigado a entregar funcionalidade demonstrável a cada sprint. Neste mecanismo vc tem no máximo 1 sprint para conseguir o modelo e algo outro algo que seja demonstrável. por isso é muito preferivel usar o sprint zero (Planning Metings) para polir o modelo ao máximo. E note que isto é feito por todos os participantes não apenas o implementador.
[/quote]
Nao entendi o que voce quis dizer com polir o modelo ao maximo, pode exemplificar? Essa frase me passou a nitida impressao de waterfall.
Quando voce diz polir, voce diz implementar as funcionalidades o mais completo possivel e depois usar UI e infra estrutura para demonstrar o que foi implementado?
[/quote]
Cruzes!! Não! Achei que todo o mundo soubesse que “modelo” sempre é conceptual. Falha minha.
[quote]
Ou voce diz, debater e desenhar até ter bem definidas as funcionalidades e só entao implementar?[/quote]
É mais por ai, debater e desenhar até que o modelo acomode as funcionalidades conhecidas.
Mas o ponto é o que significa na sua frase: “bem definida” ?
Em agil é comum ouvir o termo “well enought” (bem o suficiente). O que isto significa?
Significa que vc tem o modelo que atende os seus requisitos com o menos esforço possível. Mas isso não significa ser preguiçosos. Significa abstrair as coisas a um ponto que a programação é trivial.
Por isso que eu disse polir e não especificar.
VC sabe que todo e qualquer modelo que fizer será um modelo cru, que terá que ser melhorado. Mas isso não é desculpa para começar com um pedragulho de 2 tonelas e ir esculpindo com uma agulha.
Vc quer alterá-lo o menos vezes possivel ou seja, cada alteração tem que ser a mais eficaz possível.
Por exemplo, estamos fazendo um sistema de ERP e temos o modulos financeiro para fazer. Quem é o idiota que não usara o padrão de conta para modelar contas financeiras ? Simplesmente não faz sentido começar do zero com um modelo de entidades à toa para daqui a cinco anos descobrirmos por tentantiva e erro que o modelo de conta é o melhor para modelar este tipo de dominio. Estamos fazendo um sistema e-comerce que precisa atender um milhão de pessoas por dia. Quem vai ter a ideia de usar session para controlar os dados do usuário ? Clusterirzar session ? sim, claro, os constainers fazem isso, mas é muito melhor não precisar de fazer clustereização de session. Trabalhar com numeros e usar double? Todo o mundo já cansou de dizer que não é para usar double! A desculpa esfarrapada do costume :" … usamos double porque não necessitamos de muita precisão… " o que raios isso sequer signifca ? Ou pior ainda “usamos double porque é mais rápido que BigDecimal”…
Existem erros graves que vc pode cometer facilmente que podem facilmente ser retirados do modelo numa fase muito pre-liminar. Aplicar boas práticas e patterns é uma forma simples e rápida… bom, ok, não é simples, mas é rápida- de polir o modelo. Estamos falando de algumas horas , não dias. Estamos falando de juntar toda a equipa e sincronizar o que cada um pensa e o que pode trazer a mesa.
O exemplo muito tipo de falta de polimento é trabalhar com grandes massas de dados. O programador que caiu no conto da refactoração mágica e pensa que se retorar um List pode mandar quantos objetos forem precisos. Até que lhe aparece um OutofMemoryError na cara e ele fica desesperado e vem no GUJ perguntar como aumenta a memoria. Ai mandam-o fazer um profiling… o erro era claro do inicio. Se é preciso lidar com muitos dados List não fai dar. Pelo menos não ArrayList … o padrão Fast lane precisa ser usado. Afinal , como raios vcs pensam que funciona um ResultSet ? E ele implementa List ?
Muitos padrões são óbvios pelo próprio domínio, outros pelo contexto, outros apenas se vc tem experiencia e já viu o problema antes. Mas sempre, sempre , vc pode melhor o modelo.
O sistema manipula dinheiro ? Money de cara. Sem conversa. Não vamos perder tempo usando BigDecimal , DOuble ou double , ou pior , float, porque “o nosso sistema não precisa de precisão” ( pun intended)
Ha erros que são muito grosseiros e isso pode ser polido logo no inicio. Coisas mais complexas vc só descobre depois, mas por razão das circustancias, não que vc fez seu modelo ser limitado de propósito e esperou ele gritar para ir lá e mudá-lo.
Polir significa conversar, experimentar o modelo conceitualmente em vários cenários (aqueles que já foram levantados que serão necessários) e modelar. Modelar é legal! OO é só modelagem. Eescrever código qualquer cara de 10 anos sabe.
Vamos deixar uma coisa clara - mais uma - se modelar fosse tão ruim, tão anti-util , se tivessemos tanto que evitar modelar, porque raios somos bombardeados com metodologia focadas em encontra o mellhor modelo ? Porque se fala de patterns ? porque se fala de bad smells, anti-patterns, boas práticas , etc… ? Será que é porque modelar é ruim ? ou será que é porque a maioria das pessoas é um mau modelador ?
Porque estariamos interessados numa segunda edição do GoF se patterns não fosse realmente util ?