mcpField
L
laravel-template-method-and-plugins

laravel-template-method-and-plugins

github.com/noartemDevelopment1370 installsUpdated 3w ago
Repository

About laravel-template-method-and-plugins

A Laravel-oriented coding skill for structuring stable processes that can be extended through small classes. It covers the Template Method pattern and configurable strategy or plugin registries, with advice on isolated testing.

Key features

  1. 01Template Method algorithm skeletons
  2. 02Subclass hooks for customization
  3. 03Strategy interfaces and implementations
  4. 04Registry-based selection by key or config
  5. 05Isolated implementation testing

Use cases

  1. 01Building import flows with replaceable steps
  2. 02Supporting multiple payment gateways
  3. 03Extending behavior without switch statements

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/noartem/skills --skill laravel-template-method-and-plugins

After installing, type/laravel-template-method-and-pluginsin Claude Code to confirm it loaded.

Details

From the project README

Template Method and Pluggable Strategies

Keep core flows stable; enable extension via small classes.

Template Method

Use a base class that defines the algorithm skeleton; subclasses override hooks.

abstract class Importer {
    final public function handle(string $path): void {
        $rows = $this->load($path);
        $data = $this->normalize($rows);
        $this->validate($data);
        $this->save($data);
    }
    abstract protected function load(string $path): array;
    protected function normalize(array $rows): array { return $rows; }
    protected function validate(array $data): void {}
    abstract protected function save(array $data): void;
}

Strategy/Plugin

Define an interface; register implementations; select by key/config.

interface PaymentGateway { public function charge(int $cents, string $currency): string; }

final class StripeGateway implements PaymentGateway { /* ... */ }
final class BraintreeGateway implements PaymentGateway { /* ... */ }

final class PaymentsRegistry {
    /** @param array<string,PaymentGateway> $drivers */
    public function __construct(private array $drivers) {}
    public function for(string $key): PaymentGateway { return $this->drivers[$key]; }
}

Prefer adding a class over editing switch statements. Test implementations in isolation.

Comments

Markdown supported