Criando sua primeira aplicação console em .net
Tags: c, net, core, csharp
Published: 2023-12-30 20:46:01

## Motivação

Há 8 meses, decidi me aventurar no universo do C#. Embora já tivesse alguma noção de Orientação a Objetos, ela era bastante superficial. No início, enfrentei algumas dificuldades, principalmente para distinguir o que era recurso do C# e o que era recurso do .NET Core.

A ideia deste artigo é ensinar como criar uma aplicação console em .NET 8 com foco no C#. O objetivo principal é criar uma aplicação de console e permitir que você a aprimore da maneira que desejar.

A abordagem utilizada neste guia segue a metodologia comummente usada nas universidades:

Crie um projeto de console e pratique até se sentir confiante na linguagem C# e familiarizado com o .NET.

## Passo 1: Configurando o Ambiente de Desenvolvimento

Certifique-se de ter o .NET 8 SDK instalado em sua máquina.
Abra o Visual Studio ou sua IDE de preferência (neste artigo, usaremos o Visual Studio 2022).

## Passo 2: Roteiro para Criar uma Aplicação Console em .NET 8:

Agora, vamos criar um roteiro passo a passo para criar uma aplicação de console simples em .NET 8 com funcionalidade CRUD (Create, Read, Update, Delete). Isso será feito em um único arquivo (Program.cs), mas você também pode organizar os arquivos em diretórios conforme preferir.

## Passo 3: Criando o Projeto

Crie um novo projeto do tipo "Console App (.NET 8)", eu nomeei o meu de "ProjetoConsole".

Abra seu Visual Studio e clique para criar um novo projeto, selecione "Projeto Console" e selecione versão 8 do .Net.

## Passo 4: Definindo a Estrutura do Projeto

Crie uma classe chamada Item que representará os objetos que você deseja gerenciar na aplicação.
Em seguida, crie uma classe chamada Repository que conterá os métodos CRUD para interagir com os objetos Item.

## Passo 5: Implementando as Operações CRUD

No arquivo Program.cs, crie um loop que exiba um menu com opções para Create, Read, Update e Delete.
Em seguida, implemente cada operação CRUD no arquivo Program.cs usando uma estrutura de switch-case.

## Passo 6: Testando a Aplicação

Execute a aplicação e teste as operações CRUD para garantir que tudo esteja funcionando corretamente.
Certifique-se de que os itens criados sejam armazenados em memória ou em um banco de dados simples.

## Passo 7: Aprimorando a Aplicação

Considere aprimorar a aplicação adicionando recursos como validação de entrada, tratamento de erros e armazenamento persistente.

## Passo 8: executando e testando

Para compilar o projeto no Visual Studio 2022 e testá-lo, pressione a combinação de teclas "Ctrl + Shift + B" e, em seguida, pressione F5 ou clique em "Run".

Se preferir usar o VSCode, para criar um projeto, execute o seguinte comando no diretório desejado:

`dotnet new console -n NomeDoProjeto`

E para compilar e executar o projeto:

`dotnet watch run`

## Código fonte

Classe Item => será a base para criação de Um item, com um nome e um Id de indentificação.
` class Item
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }`

Classe Repository => Será a base(CRUD) das operações que serão realizadas para a classe Item.
`

class Repository
{
    private List<Item> items = new List<Item>();
    private int nextId = 1;

    public void Create(string name)
    {
        items.Add(new Item { Id = nextId++, Name = name });
    }

    public List<Item> ReadAll()
    {
        return items;
    }

    public Item ReadById(int id)
    {
        return items.Find(item => item.Id == id);
    }

    public void Update(int id, string name)
    {
        Item existingItem = items.Find(item => item.Id == id);
        if (existingItem != null)
        {
            existingItem.Name = name;
        }
    }

    public void Delete(int id)
    {
        Item itemToRemove = items.Find(item => item.Id == id);
        if (itemToRemove != null)
        {
            items.Remove(itemToRemove);
        }
    }
}


`
Classe Program => é a classe principal que irá chamar e instanciar a classe Repository para que as operações funcionem na prática, pra isso teremos que criar um switch case para cada caso de operação.

` 

class Program
{
    static void Main(string[] args)
    {
        Repository repository = new Repository();

        while (true)
        {
            Console.WriteLine("Escolha uma opção:");
            Console.WriteLine("1. Criar Item");
            Console.WriteLine("2. Ler Todos os Itens");
            Console.WriteLine("3. Ler Item por Id");
            Console.WriteLine("4. Atualizar Item");
            Console.WriteLine("5. Deletar Item");
            Console.WriteLine("6. Sair");

            int choice;

            if (!int.TryParse(Console.ReadLine(), out choice))
            {
                Console.WriteLine("Opção inválida.");
                continue;
            }

            switch (choice)
            {
                case 1:
                    Console.WriteLine("Digite o nome do item:");
                    string name = Console.ReadLine();
                    repository.Create(name);
                    Console.WriteLine("Item criado com sucesso.");
                    break;

                case 2:
                    List<Item> allItems = repository.ReadAll();
                    foreach (var item in allItems)
                    {
                        Console.WriteLine($"Id: {item.Id}, Nome: {item.Name}");
                    }
                    break;

                case 3:
                    Console.WriteLine("Digite o Id do item:");
                    if (int.TryParse(Console.ReadLine(), out int id))
                    {
                        Item item = repository.ReadById(id);
                        if (item != null)
                        {
                            Console.WriteLine($"Id: {item.Id}, Nome: {item.Name}");
                        }
                        else
                        {
                            Console.WriteLine("Item não encontrado.");
                        }
                    }
                    else
                    {
                        Console.WriteLine("Id inválido.");
                    }
                    break;

                case 4:
                    Console.WriteLine("Digite o Id do item a ser atualizado:");
                    if (int.TryParse(Console.ReadLine(), out int updateId))
                    {
                        Console.WriteLine("Digite o novo nome:");
                        string newName = Console.ReadLine();
                        repository.Update(updateId, newName);
                        Console.WriteLine("Item atualizado com sucesso.");
                    }
                    else
                    {
                        Console.WriteLine("Id inválido.");
                    }
                    break;

                case 5:
                    Console.WriteLine("Digite o Id do item a ser excluído:");
                    if (int.TryParse(Console.ReadLine(), out int deleteId))
                    {
                        repository.Delete(deleteId);
                        Console.WriteLine("Item excluído com sucesso.");
                    }
                    else
                    {
                        Console.WriteLine("Id inválido.");
                    }
                    break;

                case 6:
                    Console.WriteLine("Saindo da aplicação.");
                    return;

                default:
                    Console.WriteLine("Opção inválida.");
                    break;
            }
        }
    }
}

`

A ideia desse crud é permitir com que iniciantes tenham um norte para estudos quando forem pensar em iniciar no mundo do c# e .net, a partir desse crud, é possível ir estudando e se aprofundando nos conceitos desse ecossistema.

## Lições de casa:
0. Estudar OOP - Básico de instância e Herança
1. Estudar tipos de Listas e operações no .net
2. Estudar Expressões Linq

<hr/>
Caso queira ver o projeto completo, o link está em:

https://github.com/freaklucas/Artigos/tree/master/ProjetoConsole