Gridwich é uma solução .NET 6 composta por vários projetos. É importante que os projetos de código tenham uma convenção de nomenclatura para ajudar a entender a estrutura do aplicativo, encontrar código relevante rapidamente e reduzir a lei da trivialidade na nomenclatura do projeto.
O sistema Gridwich tem três componentes principais, Core
, Host.FunctionApp
e SagaParticipants
.
O projeto
Core
tem interfaces, modelos, DTOs (objetos de transferência de dados) e classes base em todo o sistema.Os projetos
Core.{Technology}
têm as classes de cliente e as funcionalidades de base que várias implementações de funcionalidade usam.O projeto
Host.FunctionApp
é a interface pública para o sistema geral.Os projetos
SagaParticipants
fornecem recursos de função externa, como análise, codificação, publicação e armazenamento.Os projetos
SagaParticipants.{Capability}
descrevem as interfaces, as exceções e os eventos que uma funcionalidade produz.Os projetos
SagaParticipants.{Capability}.{Technology}
fornecem implementação de funcionalidade real, ouvintes de eventos e funcionalidade específica da funcionalidade.
Um Gridwich Technology
é uma implementação real de uma funcionalidade ou função principal. Um projeto {Technology}
pode estar em um namespace Core
ou SagaParticipants.{Capability}
e nome do projeto, dependendo do uso.
Criação do projeto
Você pode usar a seguinte árvore de decisão ao nomear um novo projeto do Gridwich:
O código é um contrato, como classes base, interfaces, modelos ou DTOs ou uma extensão de serviço?
Sim: o código está relacionado a uma capacidade ou serviço específico?
- Sim:
Gridwich.SagaParticipants.{Capability}
- Não:
Gridwich.Core
- Sim:
Não: o código está relacionado a um ouvinte de eventos ou a uma implementação de uma tecnologia específica?
Sim: mais de um serviço usará o código?
- Sim, por exemplo, um wrapper do SDK:
Gridwich.Core.{Technology}
- Não:
Gridwich.SagaParticipants.{Capability}.{Technology}
- Sim, por exemplo, um wrapper do SDK:
Não: o código está relacionado a uma funcionalidade específica?
Sim:
Gridwich.SagaParticipants.{Capability}
Não: o código é um ponto de extremidade do Aplicativo de Funções do Azure?
- Sim:
Gridwich.Host.FunctionApp
- Não:
Gridwich.Core
- Sim:
Estrutura do projeto
Cada pacote tem dois subdiretórios filho:
src
contém o código de produção não testado.tests
contém testes de unidade.
Cada projeto tem um subdiretório tests
, mas se não houver testes de unidade para um pacote, o diretório poderá estar vazio.
Cada um dos dois subdiretórios contém o C# ou outros arquivos para compilar o código, além de um arquivo .csproj. O nome do arquivo .csproj segue o nome do pacote, por exemplo:
Gridwich.Host.FunctionApp/src/Gridwich.Host.FunctionApp.csproj
Gridwich.Host.FunctionApp/tests/Gridwich.Host.FunctionAppTests.csproj
Os namespaces de código que os pacotes usam também seguem esta convenção, por exemplo:
Gridwich.Host.FunctionApp
Gridwich.Host.FunctionAppTests
Durante os ciclos de compilação e teste, diretórios transitórios, como bin
, obj
e TestResults
aparecem e não contêm artefatos qualificados para git. O processamento dotnet clean
limpa esses diretórios transitórios.
Nomes de projeto e namespaces
Os nomes e os namespaces do projeto Gridwich têm as seguintes características.
Namespaces de tecnologia Core e SagaParticipants
Namespaces Gridwich.Core.{Technology}
não incluem a finalidade da tecnologia, principalmente para evitar a lei da trivialidade. Namespaces Core
são projetos internos que os projetos SagaParticipants
ou Host.FunctionApp
usam e não precisam de nomes bem definidos.
Por exemplo, o Gridwich.Core.EventGrid
projeto pode ser Gridwich.Core.Events.EventGrid
ou Gridwich.Core.Messaging.EventGrid
. No entanto, os nomes do projeto Core
já sugerem que as tecnologias contribuem para o sistema principal.
Uma tecnologia também pode contribuir para o sistema de mais de uma maneira. Por exemplo, você pode chamar o Redis de um armazenamento de dados ou um transporte de mensagens, dependendo do uso, mas ele sempre usa o mesmo wrapper do SDK.
Os namespaces de tecnologia Gridwich.SagaParticipants.Encode.CloudPort
e Gridwich.SagaParticipants.Encode.Flip
usam componentes do namespace Gridwich.SagaParticipants.Encode
. Esse código não está no namespace Gridwich.Core.Encode
porque é específico para codificar tarefas e não cruza para outros recursos, como a publicação.
Pacotes SagaParticipants
Nem todo pacote Gridwich.SagaParticipants
processa eventos externos. Alguns pacotes em Gridwich.SagaParticipants
fornecem funcionalidade para outros participantes Saga que processam solicitações externas.
Além do pacote Gridwich.SagaParticipants.Encode
que compartilha código em vários pacotes de tecnologia de codificação, também há pacotes especializados, como Gridwich.SagaParticipants.Encode.TelestreamCloud
. O pacote Telestream fornece acesso Gridwich a um sistema de Telestream Vantage externo. Os participantes Saga Flip e CloudPort usam o pacote Telestream para fornecer seu próprio processamento de solicitação.
Nomes de pacote e outros namespaces
Para manter as declarações using
a um mínimo, o Gridwich não restringe o conteúdo do pacote ao namespace que o nome do pacote indica. Alguns pacotes contribuem com entidades para outros namespaces. Por exemplo, o pacote Gridwich.Core.Tests
contribui com a classe Gridwich.Core.Helpers.TestHelpers
.
No entanto, cada pacote cria uma DLL que corresponde ao nome do pacote para o código de produção em src
e uma DLL de testes de unidade, se houver, em tests
. O nome da DLL de teste é o mesmo que o nome do pacote, mas com um sufixo Tests
.
Próximas etapas
Documentação do produto:
Módulos do Microsoft Learn:
- Crie um fluxo de trabalho sem servidor de longa execução com funções duráveis
- Explore Azure Functions