Gridwich è una soluzione .NET 6 composta da più progetti. È importante che i progetti di codice abbiano una convenzione di denominazione per comprendere la struttura delle applicazioni, trovare rapidamente il codice pertinente e ridurre la perdita di biciclette nella denominazione del progetto.
Il sistema Gridwich ha tre componenti principali, Core
, Host.FunctionApp
e SagaParticipants
.
Il
Core
progetto include interfacce a livello di sistema, modelli, oggetti di trasferimento dei dati (DTO) e classi di base.Core.{Technology}
I progetti hanno le classi client e le funzionalità di base usate da varie implementazioni di funzionalità.Il
Host.FunctionApp
progetto è l'interfaccia pubblica del sistema complessivo.SagaParticipants
I progetti offrono funzionalità di funzione esterna come l'analisi, la codifica, la pubblicazione e l'archiviazione.SagaParticipants.{Capability}
i progetti descrivono le interfacce, le eccezioni e gli eventi prodotti da una funzionalità.SagaParticipants.{Capability}.{Technology}
i progetti offrono implementazione effettiva delle funzionalità, listener di eventi e funzionalità specifiche delle funzionalità.
Gridwich Technology
è un'implementazione effettiva di una funzionalità o di una funzione di base. Un {Technology}
progetto può essere sotto uno Core
spazio dei nomi o e un SagaParticipants.{Capability}
nome di progetto, a seconda dell'utilizzo.
Creazione del progetto
È possibile usare l'albero delle decisioni seguente per la denominazione di un nuovo progetto Gridwich:
Il codice è un contratto, ad esempio classi di base, interfacce, modelli o DTO o un'estensione del servizio?
Sì: il codice è correlato a una capacità o a un servizio specifico?
- Sì:
Gridwich.SagaParticipants.{Capability}
- No:
Gridwich.Core
- Sì:
No: il codice è correlato a un listener di eventi o a un'implementazione di una tecnologia specifica?
Sì: più servizi useranno il codice?
- Sì, ad esempio un wrapper SDK:
Gridwich.Core.{Technology}
- No:
Gridwich.SagaParticipants.{Capability}.{Technology}
- Sì, ad esempio un wrapper SDK:
No: il codice è correlato a una funzionalità specifica?
Sì:
Gridwich.SagaParticipants.{Capability}
No: il codice è un endpoint dell'app per le funzioni di Azure?
- Sì:
Gridwich.Host.FunctionApp
- No:
Gridwich.Core
- Sì:
Struttura progetto
Ogni pacchetto ha due sottodirectory figlio:
src
contiene il codice di produzione non di test.tests
contiene unit test.
Ogni progetto ha una tests
sottodirectory, ma se non sono presenti unit test per un pacchetto, la directory potrebbe essere vuota.
Ognuna delle due sottodirectory contiene i file C# o altri file per compilare il codice, oltre a un file con estensione csproj . Il nome file con estensione csproj segue il nome del pacchetto, ad esempio:
Gridwich.Host.FunctionApp/src/Gridwich.Host.FunctionApp.csproj
Gridwich.Host.FunctionApp/tests/Gridwich.Host.FunctionAppTests.csproj
Gli spazi dei nomi di codice usati dai pacchetti seguono anche questa convenzione, ad esempio:
Gridwich.Host.FunctionApp
Gridwich.Host.FunctionAppTests
Durante i cicli di compilazione e test, directory temporanee come bin
, obj
e TestResults
vengono visualizzate, che non contengono artefatti idonei a Git. L'elaborazione dotnet clean
pulisce queste directory temporanee.
Nomi e spazi dei nomi dei progetti
I nomi e gli spazi dei nomi dei progetti gridwich presentano le caratteristiche seguenti.
Spazi dei nomi Core e SagaParticipants Technology
Gridwich.Core.{Technology}
gli spazi dei nomi non includono lo scopo della tecnologia, principalmente per evitare la spargimento di biciclette. Core
gli spazi dei nomi sono progetti interni che SagaParticipants
usano o Host.FunctionApp
progetti e non necessitano di nomi ben definiti.
Ad esempio, il Gridwich.Core.EventGrid
progetto potrebbe essere Gridwich.Core.Events.EventGrid
o Gridwich.Core.Messaging.EventGrid
. Tuttavia, i nomi dei Core
progetti suggeriscono già che le tecnologie contribuiscono al sistema principale.
Una tecnologia potrebbe anche contribuire al sistema in più di un modo. Ad esempio, è possibile chiamare Redis un archivio dati o un trasporto di messaggistica, a seconda dell'utilizzo, ma usa sempre lo stesso wrapper SDK.
Gli Gridwich.SagaParticipants.Encode.CloudPort
spazi dei nomi e Gridwich.SagaParticipants.Encode.Flip
tecnologia usano componenti dello spazio dei Gridwich.SagaParticipants.Encode
nomi . Questo codice non si trova nello Gridwich.Core.Encode
spazio dei nomi perché è specifico delle attività di codifica e non passa ad altre funzionalità come la pubblicazione.
Pacchetti SagaParticipants
Non tutti i Gridwich.SagaParticipants
pacchetti elaborano eventi esterni. Alcuni pacchetti in Gridwich.SagaParticipants
forniscono funzionalità per altri partecipanti della saga che elaborano richieste esterne.
Oltre alla creazione di Gridwich.SagaParticipants.Encode
pacchetti che condivide il codice tra più pacchetti di tecnologia di codifica, sono disponibili anche pacchetti specializzati come Gridwich.SagaParticipants.Encode.TelestreamCloud
. Il pacchetto Telestream fornisce a Gridwich l'accesso a un sistema Vantage Telestream esterno. I partecipanti alla saga Flip e CloudPort usano il pacchetto Telestream per fornire la propria elaborazione delle richieste.
Nomi dei pacchetti e altri spazi dei nomi
Per mantenere using
le istruzioni minime, Gridwich non limita il contenuto del pacchetto allo spazio dei nomi indicato dal nome del pacchetto. Alcuni pacchetti contribuiscono alle entità ad altri spazi dei nomi. Ad esempio, il pacchetto Gridwich.Core.Tests
contribuisce alla Gridwich.Core.Helpers.TestHelpers
classe .
Tuttavia, ogni pacchetto compila una DLL che corrisponde al nome del pacchetto per il codice di produzione in src
e una DLL di unit test, se presenti, in tests
. Il nome della DLL di test è uguale al nome del pacchetto, ma con un Tests
suffisso.
Passaggi successivi
Documentazione sui prodotti:
Moduli di Microsoft Learn:
- Creare un flusso di lavoro serverless a esecuzione prolungata con Durable Functions
- Esplorare Funzioni di Azure