편집

다음을 통해 공유


Gridwich 프로젝트 이름 지정 및 네임스페이스

Azure 기능

Gridwich는 여러 프로젝트로 구성된 .NET 6 솔루션입니다. 코드 프로젝트에는 애플리케이션 구조를 이해하고, 관련 코드를 신속하게 찾고, 프로젝트 명명에서 바이크쉐딩을 줄이는 데 도움이 되는 명명 규칙이 있어야 합니다.

Gridwich 시스템에는 세 가지 주요 구성 요소, Core, Host.FunctionAppSagaParticipants가 있습니다.

  • Core 프로젝트에는 시스템 전체 인터페이스, 모델, DTO(데이터 전송 개체) 및 기본 클래스가 있습니다.

    Core.{Technology} 프로젝트에는 다양한 기능 구현에서 사용하는 클라이언트 클래스 및 기본 기능이 있습니다.

  • Host.FunctionApp 프로젝트는 전체 시스템에 대한 공용 인터페이스입니다.

  • SagaParticipants 프로젝트는 분석, 인코딩, 게시 및 스토리지와 같은 외부 함수 기능을 제공합니다.

    SagaParticipants.{Capability} 프로젝트는 기능이 생성하는 인터페이스, 예외 및 이벤트를 설명합니다.

    SagaParticipants.{Capability}.{Technology} 프로젝트는 실제 기능 구현, 이벤트 수신기 및 기능별 기능을 제공합니다.

Gridwich Technology는 기능 또는 핵심 함수의 실제 구현입니다. {Technology} 프로젝트는 사용량에 따라 Core 또는 SagaParticipants.{Capability} 네임스페이스 및 프로젝트 이름 아래에 있을 수 있습니다.

프로젝트 만들기

새 Gridwich 프로젝트의 이름을 지정할 때 다음 의사 결정 트리를 사용할 수 있습니다.

코드가 기본 클래스, 인터페이스, 모델 또는 DTO와 같은 계약 또는 서비스 확장인가요?

  • 예: 코드가 특정 용량 또는 서비스와 관련이 있나요?

    • 예: Gridwich.SagaParticipants.{Capability}
    • 아니요: Gridwich.Core
  • 아니요: 코드는 이벤트 수신기 또는 특정 기술의 구현과 관련이 있나요?

    • 예: 둘 이상의 서비스에서 코드를 사용합니까?

      • 예, 예를 들어 SDK 래퍼: Gridwich.Core.{Technology}
      • 아니요: Gridwich.SagaParticipants.{Capability}.{Technology}
    • 아니요: 코드가 특정 기능과 관련이 있나요?

      • 예: Gridwich.SagaParticipants.{Capability}

      • 아니요: 코드가 Azure Function 앱 엔드포인트인가요?

        • 예: Gridwich.Host.FunctionApp
        • 아니요: Gridwich.Core

프로젝트 구조

각 패키지에는 두 개의 자식 하위 디렉터리가 있습니다.

  • src에는 테스트가 아닌 프로덕션 코드가 포함되어 있습니다.
  • tests에는 단위 테스트가 포함되어 있습니다.

모든 프로젝트에는 tests 하위 디렉터리가 있지만 패키지에 대한 단위 테스트가 없는 경우 디렉터리가 비어 있을 수 있습니다.

두 하위 디렉터리에는 각각 코드를 빌드할 C# 또는 다른 파일과 .csproj 파일이 포함되어 있습니다. .csproj 파일 이름은 패키지 이름을 따릅니다. 예를 들면 다음과 같습니다.

  • Gridwich.Host.FunctionApp/src/Gridwich.Host.FunctionApp.csproj
  • Gridwich.Host.FunctionApp/tests/Gridwich.Host.FunctionAppTests.csproj

패키지에서 사용하는 코드 네임스페이스도 다음 규칙을 따릅니다. 예를 들면 다음과 같습니다.

  • Gridwich.Host.FunctionApp
  • Gridwich.Host.FunctionAppTests

빌드 및 테스트 주기 동안 git 적격 아티팩트를 포함하지 않는 임시 디렉터리(예: bin, objTestResults 표시)가 나타납니다. dotnet clean 처리는 이러한 일시적인 디렉터리를 정리합니다.

프로젝트 이름 및 네임스페이스

Gridwich 프로젝트 이름 및 네임스페이스에는 다음과 같은 특성이 있습니다.

Core 및 SagaParticipants 기술 네임스페이스

Gridwich.Core.{Technology} 네임스페이스는 주로 바이크쉐딩을 방지하기 위해 기술의 목적을 포함하지 않습니다. Core 네임스페이스는 SagaParticipants 또는 Host.FunctionApp 프로젝트에서 사용하는 내부 프로젝트이며 잘 정의된 이름이 필요하지 않습니다.

예를 들어 프로젝트가 될 Gridwich.Core.EventGrid 수도 있습니다Gridwich.Core.Events.EventGrid.Gridwich.Core.Messaging.EventGrid 그러나 Core 프로젝트 이름은 이미 기술이 핵심 시스템에 기여한다는 것을 시사합니다.

기술은 또한 두 가지 이상의 방법으로 시스템에 기여할 수 있습니다. 예를 들어 사용량에 따라 Redis를 데이터 저장소 또는 메시징 전송이라고 부를 수 있지만 항상 동일한 SDK 래퍼를 사용합니다.

Gridwich.SagaParticipants.Encode.CloudPortGridwich.SagaParticipants.Encode.Flip 기술 네임스페이스는 Gridwich.SagaParticipants.Encode 네임스페이스의 구성 요소를 사용합니다. 이 코드는 인코딩 작업과 관련이 있으며 게시와 같은 다른 기능과 교차하지 않으므로 Gridwich.Core.Encode 네임스페이스 아래에 있지 않습니다.

SagaParticipants 패키지

모든 Gridwich.SagaParticipants 패키지가 외부 이벤트를 처리하는 것은 아닙니다. Gridwich.SagaParticipants 아래의 일부 패키지는 외부 요청을 처리하는 다른 saga 참가자를 위한 기능을 제공합니다.

여러 인코딩 기술 패키지에서 코드를 공유하는 Gridwich.SagaParticipants.Encode 패키징 외에도 Gridwich.SagaParticipants.Encode.TelestreamCloud와 같은 특수 패키지가 있습니다. Telestream 패키지는 외부 Vantage Telestream 시스템에 Gridwich 액세스를 제공합니다. Flip 및 CloudPort saga 참가자는 Telestream 패키지를 사용하여 자체 요청 처리를 제공합니다.

패키지 이름 및 기타 네임스페이스

using 문을 최소한으로 유지하기 위해 Gridwich는 패키지 이름이 나타내는 네임스페이스로 패키지 콘텐츠를 제한하지 않습니다. 일부 패키지는 엔터티를 다른 네임스페이스에 제공합니다. 예를 들어 패키지 Gridwich.Core.TestsGridwich.Core.Helpers.TestHelpers 클래스에 기여합니다.

그러나 각 패키지는 src에서 프로덕션 코드의 패키지 이름과 일치하는 DLL 및 단위 테스트의 DLL(있는 경우 tests에서)을 빌드합니다. 테스트 DLL 이름은 패키지 이름과 같지만 Tests 접미사가 있습니다.

다음 단계

제품 설명서:

Microsoft Learn 모듈: