acc-create-template-method
Template Method Pattern Generator
Creates Template Method pattern infrastructure for algorithm skeletons with customizable steps.
When to Use
| Scenario | Example |
|---|---|
| Common algorithm structure | Data import/export with format variations |
| Controlled extension points | Report generation with customizable sections |
| Code reuse across variants | Order processing with type-specific steps |
| Invariant parts protection | Template rendering with hooks |
Component Characteristics
Abstract Template Class
- Defines algorithm skeleton
- Implements invariant steps
- Declares abstract/hook methods
- Calls methods in sequence
Concrete Implementations
- Override specific steps
- Provide algorithm variants
- Inherit common behavior
- Maintain overall structure
Hook Methods
- Optional override points
- Default empty implementation
- Allow customization
- Don't break flow
Generation Process
Step 1: Generate Abstract Template
Path: src/Domain/{BoundedContext}/Template/
Abstract{Name}Template.php— Algorithm skeleton with template method
Step 2: Generate Concrete Templates
Path: src/Domain/{BoundedContext}/Template/ or src/Application/{BoundedContext}/
{Variant1}{Name}Template.php— First variant implementation{Variant2}{Name}Template.php— Second variant implementation{Variant3}{Name}Template.php— Third variant implementation
Step 3: Generate Support Classes (Optional)
Path: src/Domain/{BoundedContext}/ValueObject/
{Name}Result.php— Result value object{Name}Config.php— Configuration value object
Step 4: Generate Tests
{Variant}{Name}TemplateTest.php— Individual template testsAbstract{Name}TemplateTest.php— Template skeleton tests
File Placement
| Component | Path |
|---|---|
| Abstract Template | src/Domain/{BoundedContext}/Template/ |
| Concrete Templates (Domain logic) | src/Domain/{BoundedContext}/Template/ |
| Concrete Templates (App logic) | src/Application/{BoundedContext}/ |
| Unit Tests | tests/Unit/Domain/{BoundedContext}/Template/ |
Naming Conventions
| Component | Pattern | Example |
|---|---|---|
| Abstract | Abstract{Name}Template |
AbstractDataImporterTemplate |
| Concrete | {Variant}{Name}Template |
CsvDataImporterTemplate |
| Template Method | execute() or process() |
execute() |
| Hook Method | before{Step}(), after{Step}() |
beforeValidation() |
| Test | {ClassName}Test |
CsvDataImporterTemplateTest |
Quick Template Reference
Abstract Template
abstract readonly class Abstract{Name}Template
{
public function execute({InputType} $input): {OutputType}
{
$this->validate($input);
$data = $this->extract($input);
$transformed = $this->transform($data);
$result = $this->load($transformed);
$this->afterLoad($result);
return $result;
}
abstract protected function extract({InputType} $input): array;
abstract protected function transform(array $data): array;
protected function validate({InputType} $input): void
{
// Default validation
}
protected function afterLoad({OutputType} $result): void
{
// Hook method - optional override
}
}
Concrete Template
final readonly class {Variant}{Name}Template extends Abstract{Name}Template
{
protected function extract({InputType} $input): array
{
// Variant-specific extraction
}
protected function transform(array $data): array
{
// Variant-specific transformation
}
}
Usage Example
// Create templates for different formats
$csvImporter = new CsvDataImporterTemplate();
$jsonImporter = new JsonDataImporterTemplate();
$xmlImporter = new XmlDataImporterTemplate();
// Use same interface
$result = $csvImporter->execute($fileContent);
Common Template Method Variants
| Domain | Variants |
|---|---|
| Data Import | CSV, JSON, XML, Excel |
| Report Generation | PDF, Excel, HTML, Email |
| Order Processing | Standard, Express, International |
| Document Rendering | Markdown, LaTeX, HTML |
| Payment Flow | Card, Bank Transfer, Digital Wallet |
Anti-patterns to Avoid
| Anti-pattern | Problem | Solution |
|---|---|---|
| Too many abstract methods | Hard to implement | Use hook methods with defaults |
| Public template steps | Breaks encapsulation | Make steps protected/private |
| Mutable state | Side effects | Use readonly classes, pass data |
| Deep inheritance | Complexity | Limit to 2-3 levels max |
| Breaking LSP | Inconsistent behavior | Maintain contract in overrides |
References
For complete PHP templates and examples, see:
references/templates.md— Abstract Template, Concrete Template, Hook Methods templatesreferences/examples.md— DataImporter, ReportGenerator, OrderProcessor with tests
More from dykyi-roman/awesome-claude-code
psr-overview-knowledge
PHP Standards Recommendations (PSR) overview knowledge base. Provides comprehensive reference for all accepted PSRs including PSR-1,3,4,6,7,11,12,13,14,15,16,17,18,20. Use for PSR selection decisions and compliance audits.
22detect-code-smells
Detects code smells in PHP codebases. Identifies God Class, Feature Envy, Data Clumps, Long Parameter List, Long Method, Primitive Obsession, Message Chains, Inappropriate Intimacy. Generates actionable reports with refactoring recommendations.
15clean-arch-knowledge
Clean Architecture knowledge base. Provides patterns, antipatterns, and PHP-specific guidelines for Clean Architecture and Hexagonal Architecture audits.
15ddd-knowledge
DDD architecture knowledge base. Provides patterns, antipatterns, and PHP-specific guidelines for Domain-Driven Design audits.
14testing-knowledge
Testing knowledge base for PHP 8.4 projects. Provides testing pyramid, AAA pattern, naming conventions, isolation principles, DDD testing guidelines, and PHPUnit patterns.
12bug-root-cause-finder
Root cause analysis methods for PHP bugs. Provides 5 Whys technique, fault tree analysis, git bisect guidance, and stack trace parsing.
12