Skip to content

Domain Model

Nikolay Martyanov edited this page Nov 11, 2023 · 3 revisions

For an overview of Domain-Driven Design (DDD) and key terms used in this document, please refer to the DDD Overview

Ubiquitous Language

  • User: A person who uses the application to explore or track visited regions and experiences.
  • Visitor: A user who has not registered an account.
  • Registered User: A user who has registered an account.
  • Administrative Division: A specific administrative division, representing the formal geographic areas. The administrative divisions are structured hierarchically, meaning an administrative division can contain sub-divisions.
  • Region: A conceptual or thematic grouping of Administrative Divisions or other Regions, based on criteria like cultural, geographical, or historical aspects. Can be visited by a user. Regions are structured hierarchically, meaning a region can contain sub-regions.
  • Experience: An activity or sight that can be completed or seen in a region.
  • Cultural Context: The cultural context associated with a specific experience. This includes the region(s) where a specific variation of the experience can be found and any relevant media sources (articles, podcasts, videos, etc.). Read more about cultural context on the Cultural Context page.

Entities

User

  • Description: A person who uses the application. Can be a Registered User or a Visitor.
  • Attributes:
    • ID: Unique identifier (For Registered Users)
    • Username: User's chosen name (For Registered Users, optional for Visitors)
    • Role: User's role in the application (Registered/Visitor)

AdministrativeDivision

  • Description: A specific administrative division, representing the formal geographic areas.
  • Attributes:
    • ID: Unique identifier
    • Name: Name of the administrative division
    • ParentDivisionID: ID of the parent division, if any
    • HasSubdivisions: Boolean flag indicating if this division has subdivisions

Region

  • Description: A conceptual or thematic grouping of Administrative Divisions or other Regions, based on various criteria. Can be visited by a user.
  • Attributes:
    • ID: Unique identifier
    • Name: Name of the region
    • Description: Description of the region
    • ParentRegionID: ID of the parent region, if any
    • HasSubregions: Boolean flag indicating if this region has subregions

Experience

  • Description: An activity or sight that can be completed or seen in a region.
  • Attributes:
    • ID: Unique identifier
    • Name: Name of the experience
    • CulturalContextID: ID of associated cultural context
    • RegionIDs: IDs of the regions where the experience can be found

AdminDivisionReport

  • Description: Represents a user's relationship with an administrative division. Can be unvisited, planned or visited.
  • Attributes:
    • UserID: ID of the user
    • AdminDivisionID: ID of the administrative division
    • Status: Unvisited/Planned/Visited
    • VisitDates: Optional list of all visit dates
    • NumberOfVisits: Total number of visits

RegionReport

  • Description: Represents a user's relationship with a region. Can be unvisited, planned or visited.
  • Attributes:
    • UserID: ID of the user
    • RegionID: ID of the region
    • Status: Unvisited/Planned/Visited
    • VisitDates: Optional list of all visit dates
    • NumberOfVisits: Total number of visits

ExperienceReport

  • Description: Represents a user's relationship with an experience. Can be either planned or completed.
  • Attributes:
    • UserID: ID of the user
    • ExperienceID: ID of the experience
    • RegionID: ID of the region where the experience is located
    • Status: Planned/Completed
    • CompletionDates: Optional list of all completion dates
    • NumberOfCompletions: Total number of completions

Aggregates

RegionDescription

  • Description: Represents a specific region along with the experiences available in that region.
  • Consists of:
    • Region
    • List of Experience
  • Attributes:
    • RegionID: ID of the associated region
    • Experiences: List of experiences available in the region

CulturalContext

  • Description: Represents the cultural context associated with a specific experience.
  • Attributes:
    • ID: Unique identifier
    • ExperienceID: ID of the associated experience
    • RegionIDs: IDs of the associated regions
    • Sources: List of relevant media sources (articles, podcasts, videos, etc.)

UserJourney

  • Description: A collection of regions and experiences that a user has interacted with or plans to interact with.
  • Consists of:
    • List of RegionReport
    • List of ExperienceReport
  • Attributes:
    • Visibility: Public/Private (Determines if the journey can be seen by others)
    • StartDate: Optional start date of the journey
    • EndDate: Optional end date of the journey
    • Status: Planned/Ongoing/Completed

Domain Events

AdminDivisionInteracted

  • Description: Triggered when a user marks an administrative division as visited or planned.
  • Attributes:
    • UserID
    • AdminDivisionID
  • Effect: Triggers a check and potential update of the parent entity's visit status.

RegionInteracted

  • Description: Triggered when a user marks a region as visited or planned.
  • Attributes:
    • UserID
    • RegionID
  • Effect: Triggers a check and potential update of the parent entity's visit status.

ExperienceInteracted

  • Description: Triggered when a user marks an experience as completed or planned.
  • Attributes:
    • UserID
    • ExperienceID
    • RegionID