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 confusão na nomeação de projetos.
O sistema de Gridwich tem três componentes principais, , , Core
Host.FunctionApp
e SagaParticipants
.
O
Core
projeto tem interfaces em todo o sistema, modelos, objetos de transferência de dados (DTOs) e classes base.Core.{Technology}
Os projetos têm as classes de cliente e funcionalidades de base que várias implementações de capacidade usam.O
Host.FunctionApp
projeto é a interface pública com o sistema global.SagaParticipants
Os projetos fornecem recursos de função externa, como análise, codificação, publicação e armazenamento.SagaParticipants.{Capability}
Os projetos descrevem as interfaces, exceções e eventos que um recurso produz.SagaParticipants.{Capability}.{Technology}
Os projetos fornecem implementação de capacidade real, ouvintes de eventos e funcionalidade específica da capacidade.
Um Gridwich Technology
é uma implementação real de uma capacidade ou função central. Um {Technology}
projeto pode estar sob um ou um Core
namespace e nome do projeto, dependendo do SagaParticipants.{Capability}
uso.
Criação do projeto
Você pode usar a seguinte árvore de decisão ao nomear um novo projeto Gridwich:
O código é um contrato, como classes base, interfaces, modelos ou DTOs, ou uma extensão de serviço?
Sim: O código refere-se 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 SDK:
Gridwich.Core.{Technology}
- Não:
Gridwich.SagaParticipants.{Capability}.{Technology}
- Sim, por exemplo, um wrapper SDK:
Não: o código está relacionado a um recurso específico?
Sim:
Gridwich.SagaParticipants.{Capability}
Não: o código é um ponto de extremidade do Aplicativo de Função 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 sem teste.tests
contém testes unitários.
Cada projeto tem um subdiretório, mas se não houver testes de unidade para um tests
pacote, o diretório pode estar vazio.
Cada um dos dois subdiretórios contém o C# ou outros arquivos para criar 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
, e TestResults
aparecem, obj
que não contêm artefatos qualificados para git. O dotnet clean
processamento limpa esses diretórios transitórios.
Nomes de projetos e namespaces
Os nomes e namespaces do projeto Gridwich têm as seguintes características.
Namespaces Core e SagaParticipants Technology
Gridwich.Core.{Technology}
Os namespaces não incluem o propósito da tecnologia, principalmente para evitar o abandono de bicicletas. Core
namespaces são projetos internos que SagaParticipants
ou Host.FunctionApp
projetos 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 dos Core
projetos já sugerem que as tecnologias contribuem para o sistema central.
Uma tecnologia também pode contribuir para o sistema de mais de uma forma. Por exemplo, você pode chamar o Redis de armazenamento de dados ou transporte de mensagens, dependendo do uso, mas ele sempre usa o mesmo wrapper do SDK.
Os Gridwich.SagaParticipants.Encode.CloudPort
namespaces e Gridwich.SagaParticipants.Encode.Flip
technology usam componentes do Gridwich.SagaParticipants.Encode
namespace. Esse código não está sob namespace porque é específico para tarefas de codificação e não entra em Gridwich.Core.Encode
outros recursos, como publicação.
Pacotes SagaParticipants
Nem todos os Gridwich.SagaParticipants
pacotes processam eventos externos. Alguns pacotes em Gridwich.SagaParticipants
fornecem funcionalidade para outros participantes da saga que processam solicitações externas.
Além da Gridwich.SagaParticipants.Encode
embalagem que compartilha código em vários pacotes de tecnologia de codificação, há também pacotes especializados como Gridwich.SagaParticipants.Encode.TelestreamCloud
. O pacote Telestream fornece acesso Gridwich a um sistema externo Vantage Telestream. Os participantes da saga Flip e CloudPort usam o pacote Telestream para fornecer seu próprio processamento de solicitações.
Nomes de pacotes e outros namespaces
Para manter using
as instruções em um mínimo, 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 Gridwich.Core.Helpers.TestHelpers
classe.
No entanto, cada pacote cria uma DLL que corresponde ao nome do pacote para o código de produção em , e uma DLL de testes de unidade, se houver, em src
tests
. O nome da DLL de teste é o mesmo que o nome do pacote, mas com um Tests
sufixo.
Próximos passos
Documentação do produto:
Módulos do Microsoft Learn:
- Crie um fluxo de trabalho sem servidor de longa duração com funções duráveis
- Explore Azure Functions