From acc
Generates PHP 8.4 Proxy pattern implementations for lazy loading, caching, access control, and logging. Includes subject interfaces, proxies, and unit tests in domain-driven project paths.
How this skill is triggered — by the user, by Claude, or both
Slash command
/acc:create-proxyThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Creates Proxy pattern infrastructure for controlling access to objects.
Creates Proxy pattern infrastructure for controlling access to objects.
| Scenario | Example |
|---|---|
| Lazy initialization | Load expensive resources on first access |
| Access control | Check permissions before delegating |
| Caching | Cache results of expensive operations |
| Logging | Log calls to real subject |
Path: src/Domain/{BoundedContext}/
{Name}Interface.php — Operations contractPath: src/Infrastructure/{BoundedContext}/Proxy/
Lazy{Name}Proxy.php — Lazy initializationCaching{Name}Proxy.php — Result cachingAccessControl{Name}Proxy.php — Permission checksLogging{Name}Proxy.php — Call logging{ProxyName}Test.php — Proxy behavior verification| Component | Path |
|---|---|
| Subject Interface | src/Domain/{BoundedContext}/ |
| Real Subject | src/Domain/ or src/Infrastructure/ |
| Proxy | src/Infrastructure/{BoundedContext}/Proxy/ |
| Unit Tests | tests/Unit/Infrastructure/{BoundedContext}/Proxy/ |
| Component | Pattern | Example |
|---|---|---|
| Subject Interface | {Name}Interface | RepositoryInterface |
| Real Subject | {Name} | UserRepository |
| Proxy | {Type}{Name}Proxy | LazyUserRepositoryProxy |
| Test | {ClassName}Test | LazyUserRepositoryProxyTest |
final class {Type}{Name}Proxy implements {Name}Interface
{
private ?{Name}Interface $realSubject = null;
public function __construct(
private \Closure $factory
) {}
public function {operation}({params}): {returnType}
{
{beforeBehavior}
$result = $this->getRealSubject()->{operation}({args});
{afterBehavior}
return $result;
}
private function getRealSubject(): {Name}Interface
{
if ($this->realSubject === null) {
$this->realSubject = ($this->factory)();
}
return $this->realSubject;
}
}
// Lazy loading proxy
$repository = new LazyUserRepositoryProxy(
fn() => new UserRepository($connection)
);
// Real subject created only on first call
$user = $repository->findById($id);
| Proxy | Purpose |
|---|---|
| LazyLoadingProxy | Defer expensive object creation |
| CachingProxy | Cache method results |
| AccessControlProxy | Check permissions before execution |
| LoggingProxy | Log all method calls |
| MetricsProxy | Collect performance metrics |
| RetryProxy | Retry failed operations |
| Anti-pattern | Problem | Solution |
|---|---|---|
| Proxy != Real Subject | Behavior differs | Proxy must be transparent |
| Heavy Proxy | Too much logic | Keep proxies focused |
| Missing Interface | Can't substitute proxy | Use shared interface |
| Leaky State | Proxy state affects behavior | Keep proxies stateless when possible |
| Multiple Responsibilities | Proxy does many things | One proxy, one concern |
For complete PHP templates and examples, see:
references/templates.md — Lazy loading, caching, access control proxy templatesreferences/examples.md — Repository, service proxies with unit testsnpx claudepluginhub dykyi-roman/awesome-claude-code --plugin accGenerates Decorator pattern for PHP 8.4: interface, abstract decorator, concrete decorators (logging, caching, metrics, transactional), optional factory, and unit tests. For dynamic behavior without inheritance.
Controls access to an object for lazy initialization, access control, logging, caching, or remote access without changing its interface. Based on the Gang of Four Proxy pattern.
Covers 26 Gang of Four design patterns with PHP 8.3+ implementations, UML diagrams, and practical use cases.