Executando verificação de segurança...
0

Como eu reduzi um processo de desenvolvimento de 2 dias para 1 minuto usando Console Application!!

Sim, você leu certo no título! Tudo começou quando eu estava desenvolvendo um backend com CleanArch, CQRS e testes unitários. Para quem conhece, esse é um padrão que torna a aplicação um pouco mais burocrática, mas também a deixa muito robusta e de fácil escalabilidade. O problema era que desenvolver um simples CRUD com testes e tudo demorava pelo menos 2 dias. E quando chegava nas regras de negócio (o que realmente importa e gera valor para o software), a cabeça já estava cansada de tanto copiar e colar (como tudo é padronizado, eu copiava e colava todo o fluxo mudando apenas o nome e as propriedades da entidade).

A solução era bem simples, gerar o CRUD mais rápido seguindo os padrões do projeto e consequentemente sobrando mais tempo para focar nas regras de negócio. Então, como tudo seguia um mesmo padrão, me veio a ideia de criar um gerador que já criava todo código e arquitetura do início ao fim, mudando apenas o nome da entidade e suas propriedades. Ele precisava ser bem simples, já que ia apenas criar pastas, arquivos e escrever neles.

Então, fiz uma Console Application em C# que conseguia criar todo o fluxo bem mais rápido. Vou dar um exemplo bem simples de como funciona. Depois, vocês podem implementar de acordo com a necessidade e os padrões do seu projeto.

De início ele pede o usuário o nome da entidade, cria as pastas iniciais e pede as propriedades da entidade e propriedades do DTO.
Console.Write("Digite o nome da entidade: ");
var entityName = Console.ReadLine();
var folders = new CreateFolders(entityName!);
var properties = Set.Properties();
var dto = Set.Dto(properties);
Depois ele apenas passa o caminho das pastas criadas e as prriedades pros métodos que vão criar os arquivos e gerar os códigos.
 CreateFile.CreateEntity(folders.EntityPath, properties, entityName, dto);
 CreateFile.CreateInterface(folders.InterfacePath, entityName);
 CreateFile.CreateDto(folders.DtoPath, dto, entityName);
 CreateFile.CreateRepository(folders.RepositoryPath, properties, entityName, dto);
 CreateFile.CreateController(folders.ControllerPath, entityName);
Esse é o método que gera a entidade.
public static void CreateEntity(
    DirectoryInfo  path,
    List<Property> properties,
    string entityName, List<Property> dtos)
    {
        string className = entityName + "Entity";
        string classPath = Path.Combine(path.FullName, className + ".cs");
        using (StreamWriter sw = File.CreateText(classPath))
        {
            sw.WriteLine("namespace ApiExemplo.Entities;");
            sw.WriteLine();
            sw.WriteLine($"public class {className}");
            sw.WriteLine("{");
            sw.WriteLine("    public Guid Id { get; private set; }");
            foreach (var property in properties)
            {
            sw.WriteLine($"    public {property.Type} {property.Name} {{ get; private set;}}");
            }
            sw.WriteLine();
            sw.Write($"    public {className}(");
            for (int i = 0; i < dtos.Count; i++)
            {
                sw.Write($"{dtos[i].Type} {dtos[i].Name.ToLower()}");
                if (i < dtos.Count - 1)
                {
                    sw.Write(", ");
                }
            }
            sw.WriteLine(")");
            sw.WriteLine("    {");
            sw.WriteLine("        Id = Guid.NewGuid();");
            foreach (var dto in dtos)
            {
                sw.WriteLine($"        {dto.Name} = {dto.Name.ToLower()};");
            }
            sw.WriteLine("    }");
            sw.WriteLine();
            sw.Write("    public void Update(");
            for (int i = 0; i < dtos.Count; i++)
            {
                sw.Write($"{dtos[i].Type} {dtos[i].Name.ToLower()}");
                if (i < dtos.Count - 1)
                {
                    sw.Write(", ");
                }
            }
            sw.WriteLine(")");
            sw.WriteLine("    {");
            foreach (var dto in dtos)
            {
                sw.WriteLine($"        {dto.Name} = {dto.Name.ToLower()};");
            }
            sw.WriteLine("    }");
            sw.WriteLine("}");
        }
    }

Vou mostrar apenas ele senão o post vai ficar bem longo, mas vou deixar o link do repositório do GitHub onde deixei o gerador e a Api a qual ele está criando o fluxo.

Esse é o print do funcionamento dele.

Imagem do Imgur

Após você rodar ele, ele criará uma pasta "dev" no deu disco c.

Imgur

Então, detro desta pasta ele criará uma pasta com o nome que você colocou para entidade.

Imgur

E dentro dessa pasta vai estar a estrutura de pasta com os arquivos criados.

Imgur

Dentro de cada pasta estará os arquivos prontos para colocar no seu projeto.

Imgur

Abrindo esse arquivo, está todo o código já pronto de acordo com o padrão.

Imgur

Depois de pronto o gerador você pode gerar um .exe dele, facilitando ainda mais o uso. Obrigado por ler, espero ter ajudado!!

Carregando publicação patrocinada...
1

Já fiz muitas coisas assim, nada de reconhecimento e ainda tiveram a cara de pau de pedir ainda mais, dizendo que o que já foi feito foi bom, mas eu tinha que assumir mais coisas, consertar mais coisas também, e nada de tocar no assunto aumento de salário, só aumento de serviço, bom, cai fora.