L
laravel-template-method-and-plugins
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
- 01Template Method algorithm skeletons
- 02Subclass hooks for customization
- 03Strategy interfaces and implementations
- 04Registry-based selection by key or config
- 05Isolated implementation testing
Use cases
- 01Building import flows with replaceable steps
- 02Supporting multiple payment gateways
- 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-pluginsAfter installing, type/laravel-template-method-and-pluginsin Claude Code to confirm it loaded.
Details
From the project READMETemplate 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