🔏
Azure Serverless Quickstart
  • Introduction
  • Initial Setup
    • Workstation Installs
    • Codebase
      • Directory Structure
      • User Interface Project
        • Configuring StoryBook
        • Configure Tailwind
        • Configure Craco
        • -Architectural Decision Log
      • Data Access Project
        • DDD
      • Untitled
      • Full Stack Debugging
      • Creating GitHub Project
    • Infrastructure
      • Configure Session Behavior
      • Create AAD Tenant
      • Resource Group
      • Create AAD B2C Instance
        • Identity Experience Framework
        • Configure Session Behavior
      • Storage Account & CDN
        • CDN Rules
        • Configure Azure BLOB Storage
      • App Insights
        • Create AppInsight Account
        • Apollo GraphQL App Insights Configuration
      • CosmosDB
      • Twilio SendGrid
      • KeyVault
      • Function
      • Function App Settings
      • Front Door
      • DevOps
      • Optional Items
        • Azure Data Factory
      • Azure Event Hub
    • CICD and Source Control
      • Azure DevOps
      • SonarCloud
        • Incorporate into Yaml
      • Chromatic
      • User Interface YAML
      • CICD for Data Access
        • Create Pipeline
        • Data Access YAML
  • Application Structure
    • Connect Apollo
      • Apollo Overview
      • Create Apollo Component
    • MongoDB Integration
      • Mappings
      • Directory Structure
      • Apollo Connection
      • Models
      • Queries Mutations and Subscriptions
      • Caching Reponses
    • Integrating GraphQL Tools
      • GraphQL Code Generator
    • Feature Flags
      • Flag Structure & Storage
      • Website Integration
      • Apollo Integration
      • Tips and Techniques
      • Alternative Approaches
    • React Router
    • Adding Authentication
      • Create AAD Applications
      • Configure AAD For External Identities
      • Adding MSAL And React
      • Add MSAL to the build
      • Add MSAL to ApolloClient
      • Add MSAL to ApolloServer
    • Ant Design
    • Jest Tests
  • Azure Active Directory Business-to-Consumer (AD B2C)
    • Introduction
    • How to navigate through AD B2C documentation
    • Localization
    • Abbreviations
    • Azure AD B2C Extension
  • Cognitive Search
  • Cost Analysis
  • Technical Architecture
    • Identity and Access Control
  • Adding Functionality
    • Google Analytics
      • Create Analytics
    • DAPR
      • DAPR setup
      • DAPR Services (ignore for now)
        • Identity
  • Patterns and Practices
    • Idempotent Messages
    • Pathways
    • DDD
      • Initial Setup
        • Aggregate Root
        • Entity
        • Value Object
      • Field Types
        • Primitive Types
        • Non-Primitive Types
          • Types.DocumentArray
          • PopulatedDoc
          • Custom Types
      • Example Walkthrough
  • Open Items
    • Issue Tracking
  • Helpful Resources
  • DDD
    • Page 1
  • Experimental
    • StaticWebApp
    • Azure Maps
Powered by GitBook
On this page
  • Cosmos DB Model
  • Domain Context
  • Domain Adapter

Was this helpful?

  1. Patterns and Practices
  2. DDD
  3. Initial Setup

Entity

If the cosmos db interface extends SubdocumentBase, it is an Entity on domain side

Cosmos DB Model

/infrastructure/data-sources/cosmos-db/models/physician.ts
export interface PhysicianLicense extends SubdocumentBase {

Each entity requires:

  • Domain Context file

  • Domain Adapter

Domain Context

/domain/contexts/physician/physician-license.ts
import { Entity, EntityProps } from "../../shared/entity";
import { DomainExecutionContext } from "../context";

export interface PhysicianLicenseProps extends EntityProps {
  // Add fields according to the model
}

export interface PhysicianLicenseEntityReference extends Readonly<PhysicianLicenseProps> {}

export class PhysicianLicense<props extends PhysicianLicenseProps> 
  extends Entity<props> implements PhysicianLicenseEntityReference {
  constructor(props: props, private readonly context: DomainExecutionContext) { 
    super(props);
  }
  // Add getters and setters for the field that was mentioned/defined above
}
  • domain context file in same directory as context file of aggregate root it belongs to

  • in this example, physician-license.ts is placed in contexts/physician/ directory alongside physician.ts context file

Domain Adapter

/domain/infrastructure/persistence/physician.domain-adapter.ts
class PhysicianLicenseDomainAdapter implements PhysicianLicenseProps {
  constructor(public readonly doc: PhysicianLicense) {}
  get id() { return this.doc.id.valueOf() as string; }
  
  // Add getters and setters for the field that was mentioned/defined in Domain Context file
}
  • domain adapter in same file as domain adapter of aggregate root

  • if too many adapters in one file, you can split out the domain adapters into multiple files as needed

  • in this example, PhysicianLicenseDomainAdapter goes in physician.domain-adapter.ts

PreviousAggregate RootNextValue Object

Last updated 2 years ago

Was this helpful?