Modelo de processo de desenvolvimento RAD (Rapid Application Development), fase 2: Modelagem dos Dados. É isto que nos ensinam na escola, desde o primeiro momento. E é isto que tantas vezes esquecemos no nosso dia-a-dia de programadores. Not this time.
Quando comecei a desenvolver aplicações para jogos de loto, estas eram extremamente restritivas, apenas para o Euromilhões ou apenas para o Totoloto… Qualquer outro concurso obrigaria a uma reestruturação do código e a uma nova release do software, exclusiva para esse concurso. Como é bom de ver, isso é um bocadinho estúpido – a menos que se tenha em mente uma estratégia de venda ou de branding: continua a ser estúpido dum ponto de vista de desenvolvimento, mas é uma excelente ideia a nível de marketing, sempre são mais produtos para vender. Como não é o meu caso, esqueçam: é só estúpido.
O código, passo a passo, foi sendo melhorado para ser escalável, como deveria ter sido desde o início. O mesmo foi acontecendo à estrutura de dados, abstraindo cada vez mais a mesma duma visão centrada num dado concurso, primeiro, e nos concursos portugueses, depois. Se do Euromilhões para o Totoloto, por exemplo, já há diferenças de estruturação (o Euromilhões é, na realidade, constituído por dois jogos, por exemplo), para totolotarias de outros países havia diferenças abismais. Por exemplo, há uma totolotaria nos Estados Unidos cuja última bola sorteada tem um significado especial e deve ser tratada como um jogo à parte, à semelhança das estrelas no nosso conhecido Euromilhões. Mas há um catch: essa bola é do mesmo pote de onde saíram as outras (cinco ou seis… ou sete, não sei bem). E isto, ainda a procissão vai no adro…
O truque é aplicar uma regra velhinha da estruturação de dados: normalizar até doer, desnormalizar até funcionar. Explicar o que é a normalização é complexo sem alguma experiência prévia na matéria, pelo que prefiro reencaminhar para o artigo sobre normalização na Wikipedia. Seja como for, retenham isto: sempre que achem que uma entidade pode ter mais do que um valor numa propriedade, essa propriedade deve ir para outra entidade, nem que tenha de se criar uma entidade de propósito.
Um exemplo rápido: quantos números são sorteados no Euromilhões? Cinco – e as estrelas? Ah, então sete – separados como? Ok, a propriedade números leva o valor cinco e a propriedade estrelas leva o valor dois – possível (aliás, é assim que funciona o motor do SisRedEM v2), mas continua errado: quando aparecesse um concurso com três jogos, alterava-se a estrutura, métodos de criação, alteração e tratamento?
Adiante. A estrutura que fiz, até ver, permite todas as situações que eu conheço. O diagrama entidade-associação (avançado) que coloco abaixo corresponde à implementação de base de dados que irei usar em todos os projectos relacionados com jogos de loto.
[ a imagem foi retirada, ver este post ]
Algumas notas sobre a estrutura:
Qualquer alteração que achem que deve constar, estão à vontade.
Daqui a uns dias falarei sobre o motor de BD onde pretendo manter estes dados, assim como da implementação específica em C#.