Primi passi con Lino
Lino è uno strumento a riga di comando per creare, evolvere e standardizzare applicazioni .NET professionali con un'architettura ben definita. Automatizza attività ripetitive di scaffolding, ma il suo scopo va oltre la generazione di file: Lino guida lo sviluppatore attraverso una struttura tecnica coerente, con separazione delle responsabilità, layer espliciti, modellazione del dominio, casi d'uso, API, integrazioni, eventi, persistenza, applicazioni web e funzionalità trasversali. L'obiettivo è accelerare l'avvio e l'evoluzione di sistemi reali senza rinunciare a qualità, tracciabilità e chiarezza architetturale.
Prerequisiti
Prima di installare Lino, verifica che il tuo ambiente sia correttamente preparato:
- ✅ .NET 10.0 SDK o superiore installato. Scarica .NET
- ✅ .NET CLI disponibile nel terminale. Verifica con:
dotnet --version - ✅ Git installato per il controllo versione. Scarica Git
- ✅ Entity Framework Core CLI installata per il supporto alle migrations:
dotnet tool install --global dotnet-ef - ✅ Ambiente container compatibile con OCI, come Docker Desktop o Podman.
Compatibilità di piattaforma
Lino è multipiattaforma e può essere utilizzato sui principali sistemi operativi:
- ✅ Windows
- ✅ macOS
- ✅ Linux
Installazione
Lino è distribuito come strumento globale .NET. Prima di procedere, assicurati di avere installato il .NET 10 SDK o superiore.
Per installare la versione più recente, esegui:
dotnet tool install --global Tolitech.Lino
Dopo l'installazione, valida il funzionamento di Lino eseguendo:
lino --version
Se l'installazione riesce, la versione installata verrà visualizzata nel terminale.
Autenticazione
Dopo aver installato Lino, è necessario autenticarsi per accedere a tutte le funzionalità.
Se hai già un account, effettua il login con il comando:
lino auth login
Ti verrà richiesto di inserire:
- Utente: indirizzo e-mail precedentemente registrato.
- Password: password associata all'account.
Se non hai ancora un account, registrati direttamente dalla CLI usando:
lino user register
Durante la registrazione, inserisci:
- Nome: nome dell'utente.
- Cognome: cognome dell'utente.
- E-mail: indirizzo e-mail che servirà anche come login.
- Password: password sicura con almeno 6 caratteri.
- Conferma password: digita nuovamente la password per la validazione.
Al termine della registrazione, l'utente sarà autenticato automaticamente.
Preferenze di lingua
Per impostazione predefinita, la CLI di Lino viene visualizzata in inglese en, ma puoi cambiare la lingua secondo le tue preferenze tra le opzioni disponibili:
en | pt | es | de | fr | it | ja | ko | ru | zh
Per definire una nuova lingua, esegui il comando seguente:
lino preferences culture set --name <culture>
Sostituisci <culture> con una delle culture supportate. Ad esempio, usa pt per portoghese, en per inglese o es per spagnolo.
In alternativa, puoi selezionare la lingua tramite un elenco interattivo con:
lino preferences culture set
Regolazione della codifica UTF-8 (opzionale)
Per una visualizzazione corretta di lingue con caratteri speciali (come giapponese, coreano, russo o cinese), assicurati che il terminale sia configurato per usare la codifica UTF-8.
In Windows PowerShell, regola la codifica eseguendo i seguenti comandi:
[console]::InputEncoding = [System.Text.Encoding]::UTF8
[console]::OutputEncoding = [System.Text.Encoding]::UTF8
Nota: Su Linux, macOS e Windows Terminal, il supporto UTF-8 di solito è nativo. Anche così, si consiglia di validare la configurazione se si verifica qualche problema nella visualizzazione dei caratteri.
Comandi disponibili
Lino organizza la sua automazione in gruppi di comandi. Ogni gruppo rappresenta un'intenzione architetturale: creare la solution, aggiungere servizi, modellare il dominio, esporre API, generare pagine, configurare integrazioni, controllare migrations, versionare artefatti e preparare build.
Il riferimento più affidabile per la tua macchina è l'help della CLI installata. Usa lino --help per vedere l'albero completo dei comandi e usa --help in qualsiasi gruppo per consultare opzioni, aliases, parametri obbligatori ed esempi.
Poiché Lino evolve continuamente, tra una versione e l’altra possono comparire nuovi comandi e opzioni. Considera questa documentazione come una guida d’uso e conferma la sintassi esatta nel terminale ogni volta che automatizzi un flusso o formi qualcuno del team.
Per mostrare l’elenco dei comandi disponibili, puoi eseguire il comando radice o richiedere esplicitamente l’aiuto:
lino lino --help
lino --help lino project --help lino database migrations --help lino integration operation --help
Per visualizzare sottocomandi e opzioni di qualsiasi gruppo, usa il nome del comando da solo o combinalo con --help:
lino <command> lino <command> --help
Per esempio, quando consulti il gruppo project, la CLI mostra la descrizione del gruppo, esempi comuni e i sottocomandi disponibili:
lino project --help
DESCRIZIONE:
Gestisce i progetti Lino.
ESEMPI:
lino project new --name MyProject
lino project list
COMANDI:
new Crea un nuovo progetto.
list Elenca i progetti creati.
delete Rimuove un progetto esistente.Negli esempi, i valori tra <...> indicano argomenti da sostituire con il valore reale del tuo progetto. Ad esempio, <ProjectName> deve essere sostituito con il nome della solution, <ServiceName> con il nome del servizio e <culture> con una cultura supportata, come pt o en.
Principali gruppi di comandi:
| Gruppo | Comandi principali | Uso |
|---|---|---|
project |
new, list, delete |
Crea, elenca e rimuove progetti Lino. |
service |
new, list, delete |
Aggiunge, elenca e rimuove servizi backend. |
module |
new, list, delete |
Aggiunge, elenca e rimuove moduli all'interno di servizi modulari. |
entity |
new, edit, list, delete |
Crea, modifica, elenca e rimuove entità di dominio. |
shadow-entity (shadow) |
new |
Crea copie locali controllate di dati da un altro modulo o servizio. |
enumeration (enum) |
new, edit, list, delete |
Crea, modifica, elenca e rimuove enumerazioni di dominio. |
value-object (vo) |
new, edit, list, delete |
Crea, modifica, elenca e rimuove Value Objects. |
property (prop) |
delete |
Rimuove proprietà dalle entità di dominio. |
command |
new, list |
Genera casi d'uso di scrittura, solitamente legati a cambiamenti di stato, regole transazionali e validazioni dell'intenzione. |
query |
new, list |
Genera casi d'uso di lettura, solitamente focalizzati su query, proiezione e restituzione dei dati senza modificare lo stato. |
api |
new, list |
Genera ed elenca endpoint API per i casi d'uso. |
web-app (webapp) |
new |
Aggiunge applicazioni web. |
page |
new, edit, list |
Genera, modifica ed elenca pagine Blazor. |
event |
new, edit, list |
Crea e mantiene eventi di dominio o di integrazione. |
event-handler (handler) |
new, list |
Crea ed elenca handler di eventi. |
error-definition (error) |
new, list |
Crea definizioni di errore standardizzate. |
integration |
new, list, resource (new/list), operation (new/list), consume |
Modella integrazioni, resources, operazioni e consumer. |
feature |
background-job add, auth add, tenant add |
Aggiunge funzionalità trasversali, incluse attività in background, autenticazione e tenancy. |
database migrations |
add, remove, list, apply, revert |
Gestisce migrations di Entity Framework Core. |
secret |
list, set, remove, clear |
Gestisce secrets locali del progetto. |
plan |
add |
Registra un piano di esecuzione assistito dall'IA. |
version |
show, list, bump |
Consulta e incrementa le versioni di servizi e web apps. |
build |
- | Genera artefatti e immagini container. |
user |
register |
Registra un utente per accedere alle funzionalità autenticate di Lino. |
auth |
login, logout |
Gestisce la sessione locale della CLI, inclusi autenticazione e logout. |
preferences |
culture set |
Configura le preferenze locali della CLI, come la lingua mostrata nei comandi interattivi. |
Alcuni comandi mostrano un alias breve tra parentesi per comodità. I nomi originali rimangono il riferimento principale per lettura, documentazione, formazione, automazioni e supporto.
Avvio rapido
Crea rapidamente un'applicazione .NET moderna, scalabile e pronta per l'evoluzione continua con il seguente comando:
lino project new --name <ProjectName>
Sostituisci <ProjectName> con il nome reale della tua solution. Ad esempio, per creare un progetto chiamato MyApp, esegui lino project new --name MyApp.
Questo comando genera una solution .NET strutturata con separazione chiara tra dominio, applicazione, infrastruttura, persistenza, API, orchestrazione e test. La struttura iniziale aiuta a mantenere visibili le decisioni architetturali fin dal primo commit, evitando che regole di business, accesso ai dati, endpoint e dettagli operativi vengano mescolati nello stesso punto.
Visivamente, una solution iniziale chiamata MyApp può essere compresa così:
MyApp/ ├── MyApp.slnx ├── src/ │ ├── Aspire/ │ │ ├── AppHost/ │ │ │ └── MyApp.AppHost.csproj │ │ └── ServiceDefaults/ │ │ └── MyApp.ServiceDefaults.csproj │ └── Services/ │ └── Shared/ │ ├── Api/ │ │ └── MyApp.Shared.Api.csproj │ ├── Application/ │ │ └── MyApp.Shared.Application.csproj │ ├── Domain/ │ │ └── MyApp.Shared.Domain.csproj │ ├── Infrastructure/ │ │ └── MyApp.Shared.Infrastructure.csproj │ └── Infrastructure.Persistence/ │ └── MyApp.Shared.Infrastructure.Persistence.csproj └── tests/
Questo albero è un esempio didattico della struttura generata per il progetto dell'utente. Mostra come la solution separa esecuzione locale, servizi, layer tecnici e test fin dall'inizio.
Cosa offre il progetto iniziale
La solution iniziale creata da Lino nasce già organizzata per responsabilità tecniche. Invece di consegnare solo un progetto vuoto, la CLI prepara una base con layer e componenti adatti ad applicazioni enterprise.
| Area | Responsabilità |
|---|---|
| Domain | Concentra entità, Value Objects, enumerations, eventi di dominio, contratti di repository e regole che appartengono al business. |
| Application | Orchestra casi d'uso, commands, queries, validazioni, handlers e contratti di input e output dell'applicazione. |
| Infrastructure | Isola dettagli esterni, come servizi ausiliari, integrazioni, provider, autenticazione, messaggistica e funzionalità trasversali. |
| Persistence | Centralizza mapping, contesto di database, migrations, repository concreti e unit of work. |
| Api | Espone endpoint, contratti HTTP, filtri, autenticazione, autorizzazione e documentazione di input per consumer esterni. |
| Orchestrazione | Prepara l'esecuzione locale dei componenti, l'osservabilità di base e l'integrazione tra servizi durante lo sviluppo. |
| Tests | Organizza i test per responsabilità, permettendo di validare dominio, applicazione, API e integrazioni in modo progressivo. |
Il nome indicato in <ProjectName> diventa parte dell'identità tecnica della solution. Scegli un nome breve, stabile e rappresentativo, perché sarà usato in namespaces, assemblies, artefatti, configurazioni e riferimenti tra componenti.
Principali vantaggi:
- Architettura esplicita: separazione tra regole di business, casi d'uso, infrastruttura, persistenza e contratti di input.
- Evoluzione modulare: base preparata per servizi tradizionali, monoliti modulari, microservizi e applicazioni SaaS quando il contesto lo richiede.
- Pattern tecnici coerenti: supporto a DDD, Clean Architecture, CQRS, eventi, integrazioni, migrations, test e osservabilità.
- Meno lavoro meccanico: generazione di strutture ripetitive affinché lo sviluppatore concentri energia su dominio, regole, contratti e decisioni di prodotto.
- Codice più prevedibile: convenzioni di naming, organizzazione delle cartelle e responsabilità riducono l'ambiguità tra i membri del team.
Con Lino, lo sviluppatore non parte da una cartella vuota né da un template generico. Parte da una base opinionated, pensata per sistemi enterprise, in cui ogni artefatto generato ha una funzione tecnica chiara e può evolvere in modo incrementale.
