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.
Após você rodar ele, ele criará uma pasta "dev" no deu disco c.
Então, detro desta pasta ele criará uma pasta com o nome que você colocou para entidade.
E dentro dessa pasta vai estar a estrutura de pasta com os arquivos criados.
Dentro de cada pasta estará os arquivos prontos para colocar no seu projeto.
Abrindo esse arquivo, está todo o código já pronto de acordo com o padrão.
Depois de pronto o gerador você pode gerar um .exe dele, facilitando ainda mais o uso. Obrigado por ler, espero ter ajudado!!
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.