horda_core 0.14.0
horda_core: ^0.14.0 copied to clipboard
Code shared by Horda's client and server packages.
Horda Core for Dart language #
Shared foundation for Horda's stateful serverless platform
Horda Core provides the fundamental types, protocols, and utilities that power the message drive architecture used by both Horda server and client applications.
Overview #
Key Features #
- 🏗️ Message System: Strongly typed commands, events, and queries
- 🔍 Query Framework: Flexible data querying with nested relationships
- 🔄 Real-time Synchronization: Live view updates and change propagation
- 🌐 WebSocket Protocol: Efficient network communication
- 🔧 Developer Tools: Comprehensive logging, error handling, and JSON utilities
Core Architecture #
Message Driven System #
Horda Core implements a distributed architecture where components communicate through structured messages:
- Commands: Request actions using VerbNoun naming (e.g.,
CreateUser
,UpdateProfile
) - Events: Notify of state changes using NounVerb naming (e.g.,
UserCreated
,ProfileUpdated
) - Queries: Request data with optional real-time subscriptions
- Communication Pattern: Enables loose coupling between clients, entities, and services
Entity Identification #
Every entity in the Horda platform has a unique identifier:
- EntityId: Combines entity type and instance identifier
- Entity Types: Structured categorization of business domain objects
Query System #
Query Definitions #
Build complex data queries using the fluent query definition API:
-
View Types:
Value
- Single typed values (strings, numbers, dates)Counter
- Integer counters and metricsRef
- Links to other entities with attributesRefList
- Collections of entity references with pagination
-
Query Building: Programmatic construction with type safety
-
Nested Queries: Query referenced entities and list items
-
Pagination: Efficient handling of large datasets with
startAt
andlength
parameters
Query Results #
Retrieve structured data with version tracking:
- Result Types: Strongly typed results matching query definitions
- Change Tracking: Version information enables efficient synchronization
- Attributes: Metadata associated with references and list items
- Builders: Programmatic result construction for testing and mocking
Real-Time Synchronization #
View Changes #
Enable live data updates in client applications:
- Change Types: View updates, additions, and removals
- Subscription System: Real-time data streaming from server to clients
- Change Propagation: Automatic updates when entity state changes
- Efficient Updates: Only changed data is transmitted
WebSocket Protocol #
Low-latency communication between clients and servers:
- Message Framing: Support for both binary and text messages
- Connection Management: Robust lifecycle and error handling
- Protocol Extensions: Extensible message types for custom needs
- Performance: Optimized for high-frequency real-time updates
Utilities #
JSON Serialization #
Efficient data serialization for network transmission:
- Custom Converters: Specialized handling for DateTime and Duration objects
- Type Safety: Compile-time type checking for serialization
- Network Optimization: Compact JSON representation
Logging #
Structured logging system with multiple severity levels:
- Log Levels: Trace, Debug, Info, Warn, Error with appropriate use cases
- Structured Logging: Consistent subject-message format
- Simple Logger: Built-in console-based implementation
API Reference #
Message System (message.dart
) #
Core message types for entity-command-event communication:
RemoteMessage
- Base class for all platform messagesRemoteCommand
- Commands that request state changesRemoteEvent
- Events that notify of state changesRemoteQuery
- Queries that request data with optional subscriptions
Query Framework (query_def.dart
, query_res.dart
) #
Comprehensive querying system:
QueryDef
- Top-level query definitionsQueryResult
- Structured query results with change trackingViewQueryDef
/ViewQueryResult
- View-specific query types- Query and result builders for programmatic construction
View Changes (view.dart
) #
Real-time synchronization system:
ViewChange
- Base class for all view changes- Specific change types for each view type (value, counter, reference, list)
- Change builders and utilities for efficient updates
Supporting Types #
Essential utilities and abstractions:
EntityId
- Unique entity identification systemLogger
- Structured logging interface and implementationsFluirError
- Platform error handling- JSON converters for DateTime, Duration, and other common types
Integration #
With horda_server #
Horda Core provides the foundation for server-side entity implementation:
- Shared message types ensure type safety between client and server
- Query definitions are executed by server-side entity views
- Real-time changes are propagated through the WebSocket protocol
With Flutter Apps #
Enable real-time UI synchronization in Flutter applications:
- Query results directly bind to Flutter widgets
- View changes trigger automatic UI updates
- Strongly typed messages prevent runtime errors
License #
This project is licensed under the BSD 3-Clause License - see the LICENSE file for details.