Table of Contents

Deferred Service Resolver

Tổng quan

Deferred Service Resolver là một component quan trọng trong Jankx Framework, chịu trách nhiệm quản lý việc resolve các deferred services với lazy loading và context-aware loading.

Tính năng chính

  • Lazy Loading: Services chỉ được load khi thực sự cần thiết
  • Context-aware: Load services dựa trên context hiện tại
  • Performance Monitoring: Theo dõi performance của service resolution
  • Cache Management: Quản lý cache cho resolved services
  • Error Handling: Xử lý lỗi khi resolve services

Cách sử dụng

1. Sử dụng Facade

use Jankx\Facades\DeferredService;

// Resolve service
$userService = DeferredService::resolve('user.service');

// Check if service exists
if (DeferredService::has('user.service')) {
    $service = DeferredService::resolve('user.service');
}

// Get resolved services
$resolvedServices = DeferredService::getResolvedServices();

// Get performance metrics
$metrics = DeferredService::getPerformanceMetrics();

2. Service Registration

// Register service for specific context
DeferredService::register('admin', UserService::class);

// Register multiple services
DeferredService::registerMultiple('frontend', [
    UserService::class,
    PostService::class,
]);

// Defer service with factory
DeferredService::defer('admin', function($container) {
    return new HeavyService($container);
});

3. Context Management

// Get current context
$context = DeferredService::getCurrentContext();

// Register for specific context
DeferredService::register('admin', AdminService::class);
DeferredService::register('frontend', FrontendService::class);

Performance Monitoring

Get Statistics

// Get resolution statistics
$stats = DeferredService::getStats();

// Get registry statistics
$registryStats = DeferredService::getRegistryStats();

// Get performance metrics
$metrics = DeferredService::getPerformanceMetrics();

Monitor Performance

// Log performance metrics
DeferredService::logMetrics();

// Get performance summary
$summary = DeferredService::getPerformanceMetrics();

Cache Management

Clear Cache

// Clear all resolved services cache
DeferredService::clearCache();

// Clear specific service cache
DeferredService::clearCache('user.service');

Cache Configuration

// Set cache expiry
DeferredService::setCacheExpiry(3600); // 1 hour

// Get cache expiry
$expiry = DeferredService::getCacheExpiry();

Error Handling

try {
    $service = DeferredService::resolve('user.service');
} catch (\Exception $e) {
    Logger::error('Failed to resolve service', [
        'service' => 'user.service',
        'error' => $e->getMessage(),
    ]);
}

Integration Examples

WordPress Hooks

class ServiceHookIntegration
{
    public function __construct()
    {
        add_action('init', [$this, 'registerServices']);
        add_action('wp_loaded', [$this, 'loadContextServices']);
    }

    public function registerServices()
    {
        // Register core services
        DeferredService::register('shared', UserService::class);
        DeferredService::register('shared', PostService::class);
    }

    public function loadContextServices()
    {
        $context = DeferredService::getCurrentContext();

        // Load context-specific services
        switch ($context) {
            case 'admin':
                DeferredService::register('admin', AdminService::class);
                break;
            case 'frontend':
                DeferredService::register('frontend', FrontendService::class);
                break;
        }
    }
}

Service Provider Integration

class CustomServiceProvider extends ServiceProvider
{
    public function register()
    {
        // Register deferred services
        DeferredService::register('admin', CustomAdminService::class);
        DeferredService::register('frontend', CustomFrontendService::class);
    }
}

Best Practices

1. Service Registration

// ✅ Register services early
add_action('init', function() {
    DeferredService::register('shared', CoreService::class);
});

// ❌ Avoid late registration
add_action('wp_loaded', function() {
    DeferredService::register('shared', CoreService::class);
});

2. Context Management

// ✅ Use appropriate contexts
DeferredService::register('admin', AdminService::class);
DeferredService::register('frontend', FrontendService::class);

// ❌ Avoid registering everything as shared
DeferredService::register('shared', HeavyService::class);

3. Performance Monitoring

// Monitor service resolution performance
$startTime = microtime(true);
$service = DeferredService::resolve('user.service');
$loadTime = microtime(true) - $startTime;

if ($loadTime > 0.1) {
    Logger::warning("Slow service resolution: {$loadTime}s");
}

Troubleshooting

Service Not Found

// Check if service is registered
if (!DeferredService::has('user.service')) {
    // Register the service
    DeferredService::register('shared', UserService::class);
}

// Check current context
$context = DeferredService::getCurrentContext();
Logger::info("Current context: {$context}");

Performance Issues

// Get performance metrics
$metrics = DeferredService::getPerformanceMetrics();

// Check cache hit rates
$stats = DeferredService::getStats();

// Clear cache if needed
DeferredService::clearCache();

Memory Issues

// Monitor memory usage
$memoryUsage = memory_get_usage(true);

// Clear resolved services
DeferredService::clearCache();

// Check memory after cleanup
$memoryAfter = memory_get_usage(true);
Logger::info("Memory freed: " . ($memoryUsage - $memoryAfter));

Advanced Usage

Custom Service Factory

DeferredService::defer('admin', function($container) {
    $config = $container->make('config');
    return new CustomService($config);
});

Service Dependencies

DeferredService::defer('admin', function($container) {
    $userService = $container->make('user.service');
    $postService = $container->make('post.service');

    return new ComplexService($userService, $postService);
});

Conditional Service Loading

DeferredService::defer('admin', function($container) {
    if (is_super_admin()) {
        return new AdminService($container);
    } else {
        return new LimitedAdminService($container);
    }
});

Configuration

Environment Variables

// Enable/disable deferred services
define('JANKX_DEFERRED_SERVICES', true);

// Enable service monitoring
define('JANKX_SERVICE_MONITORING', true);

// Enable service metrics logging
define('JANKX_LOG_SERVICE_METRICS', false);

Service Configuration

// Configure service options
DeferredService::register('admin', UserService::class, [
    'deferred' => true,
    'priority' => 10,
    'cache' => true,
]);

Deferred Service Resolver - Smart Service Resolution System