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

Vai acontecer com todos. Mas o problema mais grave que ocorreu nos últimos 2/3 anos é a IA, especialmente o resumi de IA que o Google sempre te manda. E isso está tornando as pessoas preguiçosas e pegando um conteúdo razoável, mas raso e que não incentiva você procurar pelo melhor ou até ruim ou errado que vai deturpando a cabeça das pessoas cada vez mais, além de mexer com o funcionamento do cérebro para procurar o caminho mais curto que não te desafia em ter um raciocínio melhor, ou até mesmo ter um conhecimento mais sólido.

Tenho visto MUITO conteúdo de arquitetura .NET. Já é copnsenso no mercado usar o repository pattern da forma mais preguiçosa possível.

Pedi pra IA fazer uma autenticação e ele criou a seguinte query:

// No infrstrucure:
public async Task<User> GetUser(Guid userId){
    return await dbContext.Users
        .Include(u => u.Organization)
        .FirstAsync(u => i.Id == userId)
}

// No application:
public async Task<UserInfoDTO> GetUserInfo(Guid userId){
    var user = await userRepository.GetUser(userId)

    return new UserInfoDTO {
        userId = user.Id,
        userName = user.Name,
        organizationId = user.Organization.Id,
        organizationName = user.Organization.Name
    }
}

Esse código:

  • Segue Clean Arquitecture
  • Segue as práticas recomendadas do mercado
  • Retorna o usuário inteiro e a organização inteira para a aplicação (quase 50 campos ... pra usar 4)
  • Cria 2 state machines gerando overhead em hot paths (2 interrupções e resumo das threads)

Minha atualização:

// No infrstrucure:
public Iqueryable<User> GetUserQuery(Guid userId){
    return dbContext.Users
        .Where(u => i.Id == userId)
}

// No application:
public Task<UserInfoDTO> GetUserInfo(Guid userId){
    var query = userRepository.GetUserQuery(userId)

    return query.Select(u => new UserInfoDTO{
        userId = user.Id,
        userName = user.Name,
        organizationId = user.Organization.Id,
        organizationName = user.Organization.Name
    }).FirstAsync()
}

Esse código:

  • Retorna somente os campos necessários
  • Não cria nenhum overhead de troca de contexto (ele não tem await, só retorna pro pai executar)
  • Não Segue Clean Arquitecture
  • Não Segue as práticas recomendadas do mercado
  • Falha em code reviews
  • Ninguem sabe dar manutenção direto porque a galera não entende o que é async/await por baixo dos panos

Imagina isso a nível de todas as querys do sistema? pode trazer um ganho de 60 ~ 80% na performance da aplicação.

Ninguém nunca me ensinou isso. Eu que tive que procurar como funcionava por baixo dos panos!

Eu vou criar uma plataforma nova também.

Se quiser ajuda por favor me chame! https://pilati.dev

Carregando publicação patrocinada...
1

Isso pra mim é mais falta de contexto na instrução. Trabalho com IA também, e tenho conseguido gerar bons códigos com o modelo correto e instrução correta.

Claramente isso não tira a responsabilidade do desenvolvedor de analisar o que a IA fez como tu fez, mas já é uma mão na roda enorme poder ter 1000 linhas de código escritas em 5 minutos.

1

@cjunior Esse código não está falando da qualidade do código gerado por IA, está falando da falta de entendimento que as pessoas tem da arquitetura que elas escolhem.

Esse código é gerado por IA mas é o que mais vejo em projetos feitos por humanos.

Não é uma falha no prompt, é uma falha na educação sobre programação.

1

Repository Pattern provavelmente é o padrão mais mal (ab)usado que existe em consequência dele ser mal compreendido.

A plataforma que estou criando será bem colaborativa e sem fins lucrativos, ainda que tenha alguma receita para sustentar tudo. Então sua colaboração será muito útil já na primeira fase onde só vai participar quem tem experiência.

;)