Earn More by Sharing What You Love
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!

Tim Corey
32m 01s
Nesta terceira lição do curso "C# App Start to Finish", Tim Corey nos leva através do passo crucial do design de dados. Ele explica que antes de começar a construir a interface do usuário ou escrever código, você deve primeiro definir a estrutura dos dados que sua aplicação usará.
Neste artigo, exploraremos a abordagem de Tim para projetar os dados de um aplicativo rastreador de torneios, seguindo suas explicações e exemplos exatos do vídeo. Vamos dar uma olhada mais profunda no tópico de design de aplicativos, usando o vídeo de Tim para entender por que o design de dados é importante e como ele impacta toda a aplicação.
Tim começa a lição nos lembrando que já estabelecemos os requisitos e a estrutura para o aplicativo. Agora é hora de construir a estrutura de dados real. Ele aponta que alguns desenvolvedores preferem desenhar a interface do usuário primeiro, mas ele acredita que o maior sucesso vem de desenhar os dados primeiro.
Tim explica seu raciocínio:
"Seu aplicativo não é nada sem dados." Ele esclarece que um aplicativo é essencialmente um veículo para exibir, manipular, alterar e salvar dados.
Ele dá então exemplos para provar seu ponto. Mesmo um editor de texto como o Microsoft Word é construído em torno de dados — o próprio texto, formatação, espaçamento, etc. Tim leva isso adiante ao mostrar que mesmo jogos são baseados em dados. Um jogo de xadrez, por exemplo, é apenas uma coleção de peças, posições e movimentos — tudo dados. Um jogo de tiro em primeira pessoa também depende fortemente de dados como posições de personagens, velocidade de balas, detecção de acertos, valores de danos e condições de vitória.
Sua conclusão é clara:
"Tudo gira em torno de dados."
Então ele começa com o design de dados porque, uma vez que você conhece os dados, a interface do usuário se torna mais fácil de construir. Caso contrário, você está desenhando a partir de um ponto de partida sem direção. Essa abordagem ajuda desenvolvedores e designers que trabalham em ferramentas como suítes visuais, criadores de cartazes ou criadores de logotipos, porque mesmo esses aplicativos dependem de dados estruturados para criar modelos, fontes e elementos de imagem.
Tim então explica seu método preferido de planejamento: Ele desenha tudo no papel ou em um quadro branco porque é fácil de mudar e ajustar.
Ele recomenda fortemente não abrir o Visual Studio ainda, enfatizando que o planejamento deve acontecer fora do código. Ele diz que planejar no bloco de notas ou em uma tabela é essencial porque você pode facilmente riscar coisas e fazer mudanças sem ficar preso no código.
Tim mostra a versão limpa de seu design e percorre-a passo a passo. Sua primeira regra é:
"Apenas anote algo."
Ele começa com o objeto mais óbvio: Equipe.
Tim começa desenhando escrevendo o que uma Equipe precisa. Ele identifica duas propriedades principais:
Ele observa que uma equipe precisa de pessoas, então ele escreve uma lista de pessoas:
"Eu sei que preciso de uma equipe que tenha pessoas."
Ele explica que não precisa construir o objeto Pessoa ainda. Em vez disso, ele se concentra primeiro na Equipe e escreve uma nota para criar um Pessoa depois. Isso mantém o design focado e evita perder de vista o objeto principal.
Em seguida, Tim adiciona o nome da equipe como uma string.
Ele explica que a classe Equipe é simples e só precisa de algumas propriedades chave. Ele diz que o nome da equipe deve ser algo memorável como "Tim Bob Maris Su Al" ou "Torneio de Pingue-pongue", o que ajuda na marca e identificação, semelhante a como uma empresa usaria um logotipo, marca ou nome de empresa.
Em seguida, Tim desenha a classe Pessoa. Ele explica a importância de dividir nomes em primeiro e último nomes.
Tim diz que é uma prática recomendada na indústria e ajuda com personalização, como chamar alguém pelo primeiro nome em emails.
Ele também alerta sobre problemas de divisão de nome:
"Van Wilder" não é "Wilder"
"Mary Sue" não é "Mary"
Então Tim enfatiza que separar primeiros e últimos nomes deve ser feito na etapa de entrada, não dividindo depois.
Tim adiciona mais campos:
Endereço de email (string)
Número de celular (string)
Ele enfatiza que números de celular devem ser armazenados como strings porque eles não são números a serem calculados ou manipulados. Eles podem incluir formatação como parênteses e traços.
Tim também esclarece que usa a palavra "propriedades" porque essas se tornarão propriedades de classe em C#.
Tim então apresenta o objeto mais importante: Torneio.
Ele explica que o torneio é o centro de dados, já que este aplicativo é um rastreador de torneios.
Tim lista o que um torneio precisa:
Nome do Torneio Apesar de não estar nos requisitos, ele o adiciona porque vários torneios podem existir ao mesmo tempo. O nome ajuda a distingui-los.
Taxa de Inscrição Tim explica que uma taxa de inscrição permite que o administrador cobre equipes quando entram. Ele enfatiza que a taxa de inscrição deve ser armazenada como decimal, não double, porque é um dinheiro.
Equipes Inscritas Uma lista de equipes que entraram no torneio.
Prêmios Uma lista de prêmios, que podem ser zero ou mais.
Rodadas Essa parte é complexa. Tim explica que cada rodada contém confrontos, então a estrutura se torna uma lista de listas:
Rodada 1: lista de confrontos
Rodada 2: lista de confrontos
Rodada 3: lista de confrontos
Assim, Rodadas = Lista<Lista>
Tim observa que neste ponto, objetos Prêmio e Confronto ainda não estão criados, mas tudo bem porque eles serão desenvolvidos mais tarde.
Tim alerta que você perderá alguns dados durante o planejamento. Ele fala sobre Chaves Naturais e como alguns desenvolvedores as usam como identificadores. Por exemplo, um nome de torneio poderia ser único e atuar como um identificador.
No entanto, Tim prefere usar uma propriedade ID personalizada:
"Eu gosto de criar o meu próprio e chamá-lo de ID."
Ele diz que é mais fácil para indexação e gerenciamento.
Ele também nos lembra:
"Está tudo bem esquecer coisas."
Ele incentiva a fazer pesquisa e a olhar exemplos como cadastro da Amazon ou contatos de telefone para ver qual informação é tipicamente coletada para uma pessoa.
Mas ele avisa para não pensar demais nisso — erros acontecerão e podem ser corrigidos depois.
Tim enfatiza um equilíbrio crucial:
"Um aplicativo bem planejado que ainda está em sua tabela é inútil."
Ele explica que o planejamento é necessário, mas gastar muito tempo planejando pode impedi-lo de realmente construir o aplicativo. Ele incentiva seguir em frente e aceitar que o design evoluirá.
Tim apresenta o objeto Prêmio e suas propriedades:
Número do Lugar (int) Exemplo: 1 para primeiro lugar, 2 para segundo.
Nome do Lugar (string) Exemplo: "Campeão", "Vice-Campeão".
Quantidade do Prêmio (decimal) Quantia em dinheiro para esse lugar.
Percentual do Prêmio (double) Exemplo: 0.5 para 50%
Ele explica como o sistema decidirá entre usar a quantidade ou o percentual com base em qual não for zero.
Tim então apresenta o objeto Confronto:
Entradas: Lista de ConfrontoEntrada
Vencedor: Equipe
Número da Rodada: int
Ele explica que uma entrada de confronto representa uma equipe em um confronto.
Tim descreve as propriedades de ConfrontoEntrada:
Equipe
Pontuação
Confronto Pai
Ele explica por que escolheu uma lista de entradas em vez de propriedades de equipe separadas. Isso permite flexibilidade, como ordenar entradas por pontuação.
Ele também explica o propósito do Confronto Pai: Ele vincula o vencedor de uma rodada à próxima rodada.
Tim conclui que essas seis classes (Equipe, Pessoa, Torneio, Prêmio, Confronto, EntradaConfronto) são a base do aplicativo. Ele nos lembra que o plano de dados está completo e que a próxima lição se concentrará em construir a interface do usuário.
Ele termina dizendo que, embora esse design possa parecer confuso, ficará mais claro uma vez implementado no código.
Seguindo a abordagem de dados-primeiro de Tim no vídeo, agora você tem um entendimento claro de como estruturar os dados principais para um aplicativo de rastreamento de torneio. O próximo passo é construir a interface do usuário com base nesses dados, o que Tim cobre na Lição Quatro.
Do you create content for developers working with .NET, C#, Java, Python, or Node.js? Turn your expertise into extra income!
Join our newsletter, you’ll get exclusive access on article updates. We value your privacy