Editar

Compartilhar via


Nomenclatura e namespaces de projeto do Gridwich

Funções do Azure

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
  • 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}
    • 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

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: