DEV Community

Lithe
Lithe

Posted on

Orbis: A Magia da Abstração em PHP

Você já se perguntou como simplificar funcionalidades complexas em PHP de uma forma elegante e reutilizável? Apresentamos o Orbis, uma ferramenta revolucionária que transforma a maneira como gerenciamos instâncias e abstrações em PHP.

O Que é o Orbis? 🤔

Orbis é uma classe poderosa que atua como um gerenciador de instâncias global, permitindo que você abstraia funcionalidades complexas em componentes simples e reutilizáveis. Imagine poder encapsular toda a lógica de roteamento, configuração e gerenciamento de estado em uma única linha de código!

A Magia por Trás do Orbis ✨

Para entender o verdadeiro poder do Orbis, vamos analisar um exemplo real do framework Lithe:

function get(string $path, callable|array ...$handler): void {
    $caller = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1)[0];
    $key = strtolower($caller['file']);

    $router = Orbis::instance($key);
    if (!$router instanceof Router) {
        throw new Exception("Invalid router instance: Router not found");
    }

    $router->get($path, ...$handler);
}
Enter fullscreen mode Exit fullscreen mode

Este código aparentemente simples esconde uma funcionalidade incrivelmente poderosa. O Orbis permite que:

  1. Cada arquivo tenha seu próprio router
  2. As rotas sejam automaticamente gerenciadas e organizadas
  3. Não haja conflitos entre diferentes partes da aplicação

Um Exemplo Prático que vai te Surpreender 🚀

Vamos criar um sistema de cache inteligente usando Orbis:

class SmartCache {
    private array $storage = [];
    private array $analytics = [];

    public function set(string $key, mixed $value, int $ttl = 3600): void {
        $this->storage[$key] = [
            'value' => $value,
            'expires' => time() + $ttl,
            'hits' => 0
        ];
    }

    public function get(string $key): mixed {
        if (!isset($this->storage[$key])) {
            return null;
        }

        if (time() > $this->storage[$key]['expires']) {
            unset($this->storage[$key]);
            return null;
        }

        $this->storage[$key]['hits']++;
        $this->analytics[$key] = ($this->analytics[$key] ?? 0) + 1;

        return $this->storage[$key]['value'];
    }

    public function getAnalytics(): array {
        return $this->analytics;
    }
}

// Registrando diferentes instâncias para diferentes contextos
Orbis::register(new SmartCache(), 'user.cache');
Orbis::register(new SmartCache(), 'product.cache');

// Em qualquer lugar da sua aplicação
function cacheUser(User $user): void {
    $cache = Orbis::instance('user.cache');
    $cache->set("user.{$user->id}", $user);
}

function getUser(int $id): ?User {
    $cache = Orbis::instance('user.cache');
    return $cache->get("user.{$id}");
}
Enter fullscreen mode Exit fullscreen mode

Por que Isso é Revolucionário? 🌟

  1. Isolamento Automático: Cada contexto tem sua própria instância de cache
  2. Zero Configuração: Não precisa configurar nada em bootstrap ou providers
  3. Análise Integrada: Rastreamento automático de uso do cache
  4. Performance Otimizada: Instâncias são reutilizadas automaticamente

Usando Orbis no Seu Projeto

Instalação via Composer:

composer require lithemod/orbis
Enter fullscreen mode Exit fullscreen mode

Exemplo Básico:

// Registre uma instância
Orbis::register(MyClass::class);

// Use em qualquer lugar
$instance = Orbis::instance(MyClass::class);
Enter fullscreen mode Exit fullscreen mode

Conclusão 🎯

Orbis não é apenas mais uma biblioteca de gerenciamento de dependências - é uma nova forma de pensar sobre abstração e reutilização de código em PHP. Com ele, você pode:

  • Simplificar código complexo
  • Melhorar a organização do projeto
  • Reduzir acoplamento entre componentes
  • Facilitar testes e manutenção

Experimente o Orbis hoje e descubra como ele pode transformar seu código PHP em algo verdadeiramente mágico! ✨

Para entender melhor como o Orbis funciona, leia o post Como Usar Orbis para Simplificar Seu Código PHP e descubra seu potencial na prática!

Top comments (0)