Templates

The Matrix Framework uses templates to define reusable service patterns and communication configurations.

Service Templates

Basic Template

Define reusable service patterns:

<Template Name="MonitoredService">
    <Template.Resources>
        <!-- Define shared resources -->
        <MessageHandler Name="HealthCheck">
            <Handle Path="/health/*" />
        </MessageHandler>
        
        <StateDefinition Name="Metrics">
            <Property Name="RequestCount" Type="int" />
            <Property Name="ErrorCount" Type="int" />
        </StateDefinition>
    </Template.Resources>
    
    <!-- Define template structure -->
    <ServiceNode>
        <ServiceNode.MessageHandlers>
            <StaticResource ResourceKey="HealthCheck" />
        </ServiceNode.MessageHandlers>
        
        <ServiceNode.State>
            <StaticResource ResourceKey="Metrics" />
        </ServiceNode.State>
    </ServiceNode>
</Template>

Template Usage

Apply templates to services:

<Matrix xmlns="http://schemas.matrix.com/network/2024">
    <!-- Use template -->
    <ServiceNode Name="OrderAPI" 
                 Template="MonitoredService">
        <!-- Add service-specific configuration -->
        <ServiceNode.MessageHandlers>
            <MessageHandler>
                <Handle Path="/orders/*" />
            </MessageHandler>
        </ServiceNode.MessageHandlers>
    </ServiceNode>
</Matrix>

Communication Templates

Message Patterns

Define reusable message patterns:

<Template Name="RequestResponse">
    <Template.Parameters>
        <Parameter Name="RequestPath" Type="string" />
        <Parameter Name="ResponsePath" Type="string" />
    </Template.Parameters>
    
    <MessagePattern>
        <!-- Define request handling -->
        <MessageHandler Path="{RequestPath}">
            <OnMessage>
                <!-- Process request -->
                <ProcessMessage />
                
                <!-- Send response -->
                <SendMessage Path="{ResponsePath}" />
            </OnMessage>
        </MessageHandler>
    </MessagePattern>
</Template>

Pattern Usage

Apply communication patterns:

<ServiceNode Name="OrderProcessor">
    <!-- Use request-response pattern -->
    <ApplyTemplate Name="RequestResponse">
        <Template.Arguments>
            <Argument Name="RequestPath" 
                     Value="/orders/submit" />
            <Argument Name="ResponsePath" 
                     Value="/orders/response" />
        </Template.Arguments>
    </ApplyTemplate>
</ServiceNode>

Best Practices

  1. Template Design

    • Keep templates focused
    • Document parameters
    • Version templates
    • Test template combinations
  2. Resource Management

    • Share common resources
    • Define clear scopes
    • Handle cleanup
    • Monitor resource usage
  3. Pattern Application

    • Choose appropriate patterns
    • Configure carefully
    • Document usage
    • Monitor effectiveness