Desenvolvimento de Aplicações C#: Um Mergulho Profundo Através de “Criar Formulário de Equipe Parte 2” de Tim Corey (Lição 13)
Neste artigo, vamos dar uma olhada mais profunda no desenvolvimento de aplicativos C# seguindo a Lição 13 de Tim Corey de sua série "C# App Start to Finish". Tim nos guia através do processo de construção de um aplicativo Windows Forms funcional, focando em como conectar controles de IU como caixas de combinação, caixas de lista e botões a dados. Esta lição demonstra conceitos-chave como vinculação de dados, gerenciamento de listas, conectividade de banco de dados usando Dapper, e validação e depuração básicas, todas habilidades essenciais para construir aplicativos C# do mundo real.
Continuando o Formulário de Criação de Equipe
Tim começa nos lembrando de que a Lição 13 é uma continuação do vídeo anterior, onde a seção "Adicionar Novo Membro" foi conectada. Nesta lição, Tim explica que o objetivo principal é conectar a caixa suspensa (caixa de combinação) e a caixa de lista, e então conectar o objeto pessoa recém-criado para que ele apareça na lista. Tim define claramente o plano: esta lição se concentrará na conexão da IU, movimento de dados e sincronização de listas—aspectos fundamentais para construir um aplicativo desktop C#.
Entendendo os Dados da Caixa Suspensa e Caixa de Lista
Tim explica que por trás da caixa de combinação e da caixa de lista, haverá uma lista de objetos Person. Este é um exemplo clássico de vinculação de dados no Windows Forms, onde elementos de IU são vinculados a coleções de modelos de dados.
Ele cria duas listas privadas no nível da classe:
-
availableTeamMembers – as pessoas que podem ser adicionadas à equipe
- selectedTeamMembers – as pessoas já adicionadas à equipe
Tim esclarece o comportamento esperado: quando uma pessoa é selecionada da caixa suspensa e adicionada, ela deve passar de availableTeamMembers para selectedTeamMembers. Este é um padrão de operação CRUD padrão no desenvolvimento de aplicativos desktop, onde a IU reflete os dados subjacentes.
Por que Tim Não Limita Membros de Equipe por Torneio
Tim aborda uma pergunta comum de design: "Por que não restringir membros da equipe com base no torneio?" Ele explica que o formulário Criar Equipe não está vinculado diretamente a um torneio, e múltiplos torneios podem ocorrer simultaneamente.
Tim usa um exemplo prático: se tanto um torneio de basquete quanto um torneio de pingue-pongue estão ocorrendo, uma pessoa pode participar de ambos. Limitar a caixa suspensa exigiria lógica complexa e poderia introduzir bugs. Em vez disso, Tim opta por uma abordagem mais simples:
- Apenas remova uma pessoa da caixa suspensa depois que ela for adicionada a uma equipe.
Esta abordagem demonstra uma decisão prática de design de software: evite complicações desnecessárias a menos que necessário.
Criando o Método WireUpLists
Tim cria um método chamado WireUpLists para conectar as listas aos controles de IU. Este método vincula a lista availableTeamMembers à caixa de combinação e a lista selectedTeamMembers à caixa de lista.
Tim aponta uma melhoria chave: em Windows Forms modernos, você pode vincular listas diretamente a controles sem usar um BindingSource separado. Esta é uma dica útil para desenvolvedores que trabalham com vinculação de dados no Windows Forms.
Adicionando DisplayMember com Nome Completo
Tim explica que a caixa de combinação deve exibir um nome legível. A propriedade DisplayMember espera uma propriedade de string do modelo Person. Tim avisa que usar apenas FirstName ou LastName pode causar duplicatas.
Então Tim cria uma propriedade somente leitura chamada FullName:
public string NomeCompleto
{
get
{
return "{FirstName} {LastName}";
}
}
Isso demonstra uma prática importante de IU: sempre certifique-se de que sua IU exiba informações amigáveis ao usuário, não dados de objetos brutos.
Criando Dados de Amostra para Testes
Tim cria um método chamado CreateSampleData para testar as listas e a IU. Ele adiciona objetos Person de amostra a ambas as listas e chama WireUpLists no construtor.
Esta é uma técnica útil para construir e testar aplicativos Windows Forms rapidamente antes de se conectar a um banco de dados real.
Substituindo Dados de Amostra por Dados Reais
Tim comenta os dados de amostra e se prepara para carregar dados reais. Ele adiciona um método GetPerson_All à interface IDataConnection. Tim explica sua convenção de nomenclatura:
-
Criar = inserir
- Obter = selecionar
Esta é uma estratégia de nomenclatura padrão para camadas de acesso a dados em aplicativos C#.
Implementando Recuperação de Dados SQL Usando Dapper
Tim implementa a versão SQL de GetPerson_All usando Dapper e um procedimento armazenado:
connection.Query<PersonModel>("spPeople_GetAll").ToList();
Tim intencionalmente usa uma variável de saída em vez de um retorno direto para facilitar a depuração. Isso demonstra como as práticas de depuração podem afetar o design do código.
Limpando Código Repetido com Constantes
Tim percebe nomes de strings de conexão repetidos e os muda para uma constante. Ele explica que a repetição é uma má prática e pode causar erros mais tarde.
Este é um princípio importante de engenharia de software: DRY (Don't Repeat Yourself).
Carregando Dados Reais na Caixa Suspensa
Tim cria LoadListData() e preenche availableTeamMembers usando GetPerson_All(). A lista selectedTeamMembers permanece vazia, o que é correto, pois uma nova equipe começa vazia.
Isso demonstra como conectar a IU a fontes de dados reais, seja um banco de dados ou arquivo de texto.
Conectando o Botão Adicionar Membro
Tim cria o manipulador de eventos do botão Adicionar Membro. A lógica é:
-
Obter a pessoa selecionada da caixa suspensa
-
Removê-la da lista disponível
-
Adicioná-la à lista selecionada
- Atualizar a UI
Tim explica que o item selecionado deve ser convertido para PersonModel porque a caixa de combinação armazena objetos como objetos. Isso destaca a importância da conversão de tipo e manipulação de objetos em C#.
Depurando o Problema de Atualização
Tim descobre que a UI não atualiza após mover itens. Após depurar, ele encontra a solução:
-
Defina DataSource como nulo
- Em seguida, reasignar a lista
Isso força a atualização da caixa de combinação e da caixa de lista. Tim enfatiza que habilidades de depuração são essenciais e muitas vezes necessárias para entender como a vinculação de dados se comporta.
Conectando o Botão Remover Selecionado
Tim renomeia o botão para Remover Selecionado e cria o manipulador de eventos. Isso reverte a operação de adição:
-
Remover de selectedTeamMembers
-
Adicionar de volta para availableTeamMembers
- Atualizar UI
Tim descobre um bug: se nenhum item for selecionado, um valor nulo é adicionado. Ele adiciona validação:
if (p != null)
{
// prosseguir
}
Isso demonstra validação básica e prevenção de erros.
A Importância do Teste
Tim enfatiza testar seu aplicativo como um usuário que tenta quebrá-lo. Ele aconselha ter testadores que intencionalmente tentam quebrar o aplicativo, porque usuários reais farão ações inesperadas.
Esta é uma lição chave para construir software confiável.
Conectando o Botão "Criar Membro"
Tim modifica o botão "Criar Membro" para salvar uma nova pessoa no repositório de dados e imediatamente adicioná-la à lista selecionada. Isso demonstra como implementar operações CRUD em um aplicativo Windows Forms.
Implementando GetPerson_All para Arquivo de Texto
Tim percebe que a versão de arquivo de texto de GetPerson_All está faltando. Ele a implementa usando uma linha simples:
return PeopleFile.FullFilePath.LoadFile().ConvertToPersonModels();
Isso mostra que o armazenamento baseado em arquivos pode ser implementado facilmente sem lógica complexa.
Confirmando Que Tudo Funciona
Tim executa o aplicativo e confirma que a caixa suspensa agora carrega pessoas do arquivo de texto e do banco de dados. Ele adiciona novas pessoas e as vê aparecer imediatamente, mostrando que o sistema completo funciona corretamente.
Qual o próximo passo?
Tim conclui afirmando que o próximo vídeo será focado em criar a própria equipe. Isso envolve salvar várias peças de dados no banco de dados ou arquivo de texto, completando o recurso.
Considerações finais
A Lição 13 de Tim Corey é um exemplo do mundo real de desenvolvimento de aplicativos C# Windows Forms. Da conexão de controles de IU e vinculação de dados à depuração e validação, Tim ensina habilidades práticas de programação para construir aplicativos de desktop reais. Esta lição é especialmente valiosa para desenvolvedores que desejam aprender vinculação de dados, Dapper, operações CRUD em SQL e programação orientada por IU em C#.
Se você quiser continuar aprendendo, a próxima lição de Tim completará o recurso de criação de equipe e amarrará tudo junto em um aplicativo funcional.
