# ECOSYSTEM

## Scopo

Il presente documento descrive la struttura generale dell'ecosistema B-Arts.

Ha lo scopo di fornire una mappa dei principali componenti, dei relativi livelli architetturali e delle relazioni esistenti tra framework, strumenti, modelli di progetto e componenti appartenenti alle precedenti generazioni dell'ecosistema.

---

## B-Arts

B-Arts è un ecosistema software costituito da framework, librerie, strumenti di sviluppo, modelli di progetto e strutture dati progettati per condividere convenzioni, logiche e principi architetturali comuni.

Il prefisso `B` identifica i componenti appartenenti all'ecosistema B-Arts ed è utilizzato nei namespace, nelle classi, nei pacchetti, nei modelli di progetto e negli strumenti.

---

## Architettura corrente

L'architettura corrente è organizzata su livelli.

Le dipendenze procedono dai livelli superiori verso quelli inferiori.

### Livello 0

`BFramework`

Rappresenta la base comune dell'intero ecosistema.

Contiene le funzionalità generali riutilizzabili dai componenti di livello superiore ed è indipendente dalla tecnologia utilizzata per l'interfaccia utente.

### Livello 1

Framework specializzati:

- `BFrameworkControls`
- `BFrameworkWebControls`
- `BFrameworkMAUI`

I framework di Livello 1 dipendono da `BFramework` e forniscono funzionalità e controlli specifici per il relativo ambiente applicativo.

### Strumenti

`BStudio 2026`

BStudio è lo strumento di sviluppo e automazione dell'ecosistema.

Utilizza `BFramework` e supporta la generazione e manutenzione delle parti ripetitive delle applicazioni, tra cui Stored Procedure, classi, pagine, controlli e altri artefatti applicativi.

L'installazione di BStudio rende inoltre disponibili i modelli di progetto ufficiali dell'ecosistema.

---

## Modelli di progetto

I modelli di progetto forniscono strutture applicative preconfigurate e coerenti con l'architettura B-Arts.

I modelli previsti dall'ecosistema sono:

- `BBaseLibraryModel`
- `BAppConsoleModel`
- `BWebApiModel`
- `BWorkerServiceModel`
- `BBlazorWebAppModel`
- `BWinFormModel`
- `BMAUIAppModel`

La guida operativa dei modelli disponibili parte da [MODELS.md](MODELS.md). I modelli MAUI restano fuori dalla documentazione operativa finché non saranno disponibili nell'architettura corrente.

---

## DBTemplateModel

`DBTemplateModel` rappresenta la struttura dati comune utilizzata come base dai template applicativi gestionali.

Contiene le strutture necessarie alla gestione delle funzionalità comuni delle applicazioni, tra cui utenti, profili, sistemi, ruoli e altre informazioni infrastrutturali.

I template applicativi possono utilizzare una libreria derivata da `BBaseLibraryModel` che effettua il mapping delle strutture presenti in `DBTemplateModel`.

---

## Distribuzione

I framework principali dell'ecosistema vengono distribuiti mediante pacchetti NuGet.

I pacchetti di livello superiore includono le dipendenze necessarie verso i componenti di livello inferiore.

In particolare, i framework specializzati dipendono da `BFramework`.

---

## Generazioni precedenti

L'ecosistema B-Arts deriva da precedenti generazioni di framework e strumenti .NET che continuano a essere rilevanti per applicazioni sviluppate con tecnologie precedenti.

### Prima generazione .NET

Componenti principali:

- `BArtsFramework`
- `BStudio 2017`

`BArtsFramework` riuniva in un unico framework le funzionalità di base, i controlli Windows Forms e i controlli ASP.NET.

Il relativo assembly e pacchetto sono denominati `B-ArtsFramework`. Il pacchetto NuGet è unlisted e deprecato; la documentazione tecnica della prima generazione è inclusa nella sezione [LEGACY.md](LEGACY.md).

Questa prima generazione monolitica non coincide completamente con la successiva separazione tra `BArtsFrameworkStandard` e `BArtsFrameworkNet`: il confronto dei sorgenti rileva tipi esclusivi e differenze nei membri pubblici.

Lo sviluppo applicativo e la generazione del codice tramite BStudio erano principalmente basati su Visual Basic.

### Seconda generazione .NET

Componenti principali:

- `BArtsFrameworkStandard`
- `BArtsFrameworkNet`
- `BStudio 2019`
- `BStudio 2022`
- `TemplateBaseLibrary`

`BArtsFrameworkStandard` conteneva le funzionalità di base condivisibili mediante .NET Standard 2.0.

`BArtsFrameworkNet` dipendeva da `BArtsFrameworkStandard` e conteneva i componenti specifici per ASP.NET e Windows Forms.

I pacchetti NuGet di `BArtsFrameworkStandard` e `BArtsFrameworkNet` risultano deprecati e sono pertanto classificati come `Legacy`. La relativa documentazione tecnica parte da [LEGACY.md](LEGACY.md).

I successori diretti sono `BStandardFramework` e `BNetFramework`. La differenza principale riguarda il passaggio da `System.Data.SqlClient` a `Microsoft.Data.SqlClient`, ma il confronto dei sorgenti evidenzia anche differenze in alcuni tipi, namespace e membri pubblici.

### Terza generazione .NET

Componenti principali:

- `BStandardFramework`
- `BNetFramework`
- `BStudio 2022`
- `TemplateWebBaseLibrary`

`BStandardFramework`, basato su .NET Standard 2.0, rappresentava il livello trasversale e condivisibile dell'architettura. Era pensato per realizzare class library riutilizzabili da applicazioni MAUI, Windows Forms, `BNetFramework` e altri tipi di progetto compatibili.

`BNetFramework` dipendeva da `BStandardFramework` e conteneva i componenti ASP.NET e Windows Forms.

Questa generazione ha introdotto, tra le altre evoluzioni, l'utilizzo di `Microsoft.Data.SqlClient` al posto di `System.Data.SqlClient`.

`BStudio 2022` include inoltre le prime funzionalità orientate alla generazione di classi compatibili con il nuovo `BFramework`.

La documentazione tecnica completa di `BNetFramework` e `BStandardFramework` parte da [CLASSIC.md](CLASSIC.md).

In questa documentazione il termine `Classic` serve esclusivamente a distinguere tale linea dalla piattaforma moderna .NET 10. Le tecnologie classiche possono ancora essere appropriate per nuovi sviluppi o per l'evoluzione di applicazioni esistenti quando il target e l'architettura del progetto lo richiedono.

---

## Modelli delle generazioni precedenti

Tra i modelli di progetto appartenenti alle precedenti generazioni dell'ecosistema sono presenti:

- `BWebAppTemplateStandardCs`
- `BBaseLibraryTemplate`
- `BWebApiTemplate`
- `BMAUIAppTemplate`

---

## Continuità architetturale

Le diverse generazioni dell'ecosistema condividono gli stessi principi fondamentali:

- Centralizzare le funzionalità comuni.
- Evitare la duplicazione del codice.
- Mantenere coerenza tra applicazioni differenti.
- Automatizzare le attività ripetitive.
- Mantenere leggibile e modificabile il codice generato.
- Consentire allo sviluppatore di mantenere il controllo dell'applicazione.

L'architettura corrente rappresenta l'evoluzione di questi principi e non una loro sostituzione.
