Recentemente, li a postagem no blog Three Big Lies e estou tendo dificuldades para justificar a segunda mentira, citada aqui:
(MENTIRA # 2) O CÓDIGO DEVE SER PROJETADO EM TORNO DE UM MODELO DO MUNDO
Não há valor no código ser algum tipo de modelo ou mapa de um mundo imaginário. Não sei por que este é tão atraente para alguns programadores, mas é extremamente popular. Se houver um foguete no jogo, tenha certeza de que existe uma classe "Foguete" (supondo que o código seja C ++) que contém dados para exatamente um foguete e faz coisas perigosas. Sem levar em consideração o que realmente está sendo feito na transformação de dados ou o layout dos dados. Ou, nesse caso, sem o entendimento básico de que onde há uma coisa, provavelmente há mais de uma.
Embora existam muitas penalidades de desempenho para esse tipo de design, a mais significativa é que ela não é dimensionada. Em absoluto. Cem foguetes custam cem vezes mais que um foguete. E é extremamente provável que custe ainda mais do que isso! Mesmo para quem não é programador, isso não deve fazer sentido. Economia de escala. Se você tem mais de algo, deve ficar mais barato, não mais caro. E a maneira de fazer isso é projetar os dados corretamente e agrupar as coisas por transformações semelhantes.
Aqui estão meus problemas com essa mentira em particular.
Existe valor no código ser um modelo / mapa de um mundo imaginário, pois a modelagem do mundo imaginário ajuda (pelo menos eu, pessoalmente) a visualizar e organizar o código.
Ter uma aula "Rocket" é, para mim, uma escolha perfeitamente válida para uma aula. Talvez "foguetes" possam ser divididos em tipos de foguetes como AGM-114 Hellfire, etc., que conteriam força de carga, velocidade máxima, raio máximo de rotação, tipo de mira e assim por diante, mas ainda assim todos os foguetes disparados precisariam ter uma posição e uma velocidade.
É claro que ter 100 Rockets custa mais de 1 Rocket. Se houver 100 Rockets na tela, deve haver 100 cálculos diferentes para atualizar sua posição. O segundo parágrafo parece afirmar que, se houver 100 Rockets, custará menos de 100 cálculos para atualizar o estado?
Meu problema aqui é que o autor apresenta um modelo de programação "defeituoso", mas não apresenta uma maneira de "corrigi-lo". Talvez eu esteja explorando a analogia da classe Rocket, mas eu realmente gostaria de entender o raciocínio por trás dessa mentira. Qual é a alternativa?