← tutti gli articoli

.NET

Il progetto CRUD che ho costruito per avere qualcosa da mostrare ai recruiter

Ispirato a un coding assessment che André Baltieri (Balta) dà ai candidati, ho costruito un'app CRUD di Student e abbonamento Premium con auth vera in pochi giorni, e ho speso il tempo risparmiato su ciò che rende davvero un progetto finito.

Il progetto CRUD che ho costruito per avere qualcosa da mostrare ai recruiter

Volevo un progetto a cui poter indirizzare i recruiter che fosse davvero finito, non un'altra idea a metà seduta in un repo da qualche parte. Lo spunto è arrivato da un video di André Baltieri, di Balta, che ripercorreva un coding assessment che dà ai candidati per un ruolo in Balta.io: costruire un'app completa di gestione Student e abbonamento Premium con authentication in ASP.NET Core, consegnata in pochi giorni.

Perché ho costruito la stessa cosa

Il punto centrale di Balta in quel video era che finire qualcosa di semplice e funzionante batte una versione incompleta e over-engineered di qualcosa di ambizioso. Corrispondeva esattamente a ciò che mi serviva per un pezzo di portfolio, quindi ho costruito lo stesso brief per me stesso: un'app CRUD di Student e abbonamento Premium, auth vera, niente di esotico.

Cosa ha reso tutto davvero veloce

Ho usato l'Identity integrato di ASP.NET Core invece di scrivere la mia authentication da zero:

dotnet new razor -au Individual

Quella singola flag -au Individual monta un intero sistema di identity locale, registrazione, login, logout, e cookie persistenti, senza che io tocchi un'implementazione JWT.

Per i model Student e Premium, mi sono appoggiato alle data annotation invece di scrivere una logica di validazione separata:

public class Student
{
    [Key]
    public int Id { get; set; }

    [Required(ErrorMessage = "Full Name is required")]
    [StringLength(80, MinimumLength = 5)]
    public string Name { get; set; } = string.Empty;

    [Required]
    [EmailAddress]
    public string Email { get; set; } = string.Empty;

    public List<Premium> Premiums { get; set; } = new();
}

Un singolo attribute sul model gestisce sia la constraint di database sia la validazione del form sulla pagina, senza JavaScript extra o controlli manuali da nessuna delle due parti.

L'altro grande risparmio di tempo è stato lo scaffolding. Il generatore di codice di Microsoft può costruire l'intero set di pagine CRUD direttamente contro EF Core:

dotnet tool install -g dotnet-aspnet-codegenerator
dotnet aspnet-codegenerator razorpage Create Create -m Student -dc ApplicationDbContext -sqlite -udl -outDir Pages/Students

Questo ha generato le view, gli handler del form, e le chiamate di save per Create, Edit, Delete, Details, e la list view in minuti invece che ore.

Cosa ho fatto con il tempo risparmiato

Una volta che il CRUD e l'auth di base funzionavano, ho speso il resto del tempo sulle parti che rendono davvero un progetto finito invece che scaffolded: ripulire il codice generato e i nomi, stilizzare l'UI per bene invece di lasciare l'aspetto Bootstrap di default, popolare il database così che non fosse vuoto la prima volta che qualcuno lo apriva, e aggiungere test attorno agli endpoint principali.

Cosa ne ho tratto

La vera lezione è stata che un progetto piccolo e completo dice più a un recruiter di uno più grande fatto a metà, e il formato dell'assessment di Balta è un buon modo per imporsi da soli quel vincolo.