Core Concepts

Core Concepts

The Matrix Framework provides a declarative approach to building distributed systems using modern architectural patterns.

Fundamental Principles

Declarative Communication

The framework enables developers to define service relationships, message routing, and state management using a declarative XAML-based syntax:

<Matrix xmlns="http://schemas.matrix.com/network/2024">
    <ServiceNode Name="OrderSystem">
        <ServiceNode.State>
            <DistributedState Mode="Replicated" 
                             Consistency="Strong" />
        </ServiceNode.State>
        
        <ServiceNode Name="OrderProcessor">
            <MessageRouter>
                <Route Path="/orders/*" 
                       Strategy="Bubble" />
            </MessageRouter>
        </ServiceNode>
        
        <ServiceNode Name="Inventory">
            <MessageRouter>
                <Route Path="/stock/*" 
                       Strategy="Tunnel" />
            </MessageRouter>
        </ServiceNode>
    </ServiceNode>
</Matrix>

Hierarchical Service Organization

Services are organized in a hierarchical tree structure that facilitates:

  • Natural message routing paths
  • Logical service grouping
  • State propagation
  • Command distribution

Property System

The framework includes a robust property system for managing distributed state:

public class DistributedProperty
{
    public static readonly DependencyProperty StateProperty =
        DependencyProperty.Register(
            "State",
            typeof(object),
            typeof(ServiceNode),
            new PropertyMetadata(
                null,
                OnStateChanged,
                CoerceState
            )
        );

    private static void OnStateChanged(
        DependencyObject d, 
        DependencyPropertyChangedEventArgs e)
    {
        // Propagate state changes through the network
        await PropagateStateChangeAsync(d, e.NewValue);
    }
}

Architectural Components

Communication Tree

The communication tree forms the backbone of the system:

public class CommunicationTree
{
    private readonly ServiceNode _rootNode;
    private readonly IMessageRouter _router;
    private readonly IStateManager _stateManager;

    public async Task ProcessMessageAsync(NetworkMessage message)
    {
        var path = CalculateMessagePath(message);
        await PropagateMessageAsync(path, message);
    }

    private async Task PropagateMessageAsync(
        IEnumerable<ServiceNode> path, 
        NetworkMessage message)
    {
        foreach (var node in path)
        {
            await node.HandleMessageAsync(message);
            
            if (message.IsHandled)
                break;
        }
    }
}

State Management

State is managed through a distributed property system:

public class StateManager
{
    private readonly IStateStore _store;
    private readonly IStateReplicator _replicator;

    public async Task<T> GetStateAsync<T>(string path)
    {
        // Check local cache
        if (_cache.TryGetValue(path, out var cached))
            return (T)cached;

        // Load from distributed store
        var state = await _store.LoadStateAsync<T>(path);
        
        // Cache locally
        _cache.Set(path, state);
        
        return state;
    }

    public async Task SetStateAsync<T>(string path, T value)
    {
        // Update local cache
        _cache.Set(path, value);
        
        // Store in distributed storage
        await _store.SaveStateAsync(path, value);
        
        // Replicate to other nodes
        await _replicator.ReplicateAsync(path, value);
    }
}

Message Routing

Messages are routed through the service hierarchy:

public class MessageRouter
{
    private readonly RouteTable _routes;
    private readonly IMessageDispatcher _dispatcher;

    public async Task RouteMessageAsync(NetworkMessage message)
    {
        var route = _routes.FindRoute(message.Path);
        
        switch (route.Strategy)
        {
            case RouteStrategy.Bubble:
                await RouteBubblingAsync(message, route);
                break;
                
            case RouteStrategy.Tunnel:
                await RouteTunnelingAsync(message, route);
                break;
                
            case RouteStrategy.Direct:
                await RouteDirectAsync(message, route);
                break;
        }
    }
}

Design Patterns

Command Pattern

Commands encapsulate remote operations:

public class NetworkCommand
{
    public async Task ExecuteAsync(CommandParameters parameters)
    {
        // Validate command
        if (!await CanExecuteAsync(parameters))
            throw new CommandValidationException();

        // Create command message
        var message = new CommandMessage(parameters);

        // Route to target service
        await _router.RouteCommandAsync(message);

        // Wait for response
        var response = await message.WaitForResponseAsync();

        // Process response
        await ProcessResponseAsync(response);
    }
}

Observer Pattern

Services can observe state changes:

public class StateObserver
{
    public IObservable<T> ObserveState<T>(string path)
    {
        return Observable.Create<T>(observer =>
        {
            // Subscribe to state changes
            var subscription = _stateManager
                .ObserveStateAsync<T>(path)
                .Subscribe(observer);

            // Return cleanup
            return () => subscription.Dispose();
        });
    }
}

Template Pattern

Templates define reusable service patterns:

public class ServiceTemplate
{
    public ServiceNode CreateInstance(IDictionary<string, object> parameters)
    {
        // Create new service instance
        var instance = new ServiceNode();

        // Apply template configuration
        ApplyConfiguration(instance, parameters);

        // Initialize state
        InitializeState(instance);

        // Setup message handling
        ConfigureMessageHandling(instance);

        return instance;
    }
}

Best Practices

  1. Service Design

    • Keep services focused and cohesive
    • Define clear message contracts
    • Handle state consistently
    • Implement proper error handling
    • Document service interfaces
  2. Message Flow

    • Design clear routing paths
    • Handle message failures
    • Implement retry logic
    • Monitor message flow
    • Log routing decisions
  3. State Management

    • Define state boundaries
    • Handle concurrent updates
    • Implement conflict resolution
    • Cache appropriately
    • Monitor state health
  4. Security

    • Authenticate services
    • Authorize operations
    • Encrypt sensitive data
    • Audit message flow
    • Validate state changes