Reference location:
.claude/references/DECISION_MATRIX.md
A decision guide for selecting optimal patterns based on the situation.
UseCase Patterns#
â Standard: Optional Constructor Injection (Pure DI)
UseCase ėŽėĐ? âYesâ Optional Constructor Injection
âNoâ Repository ė§ė ė ę·ž ęļė§ (UseCase íĩíīėë§!)
Pattern#
| Criteria | Optional Constructor Injection |
|---|---|
| Recommended | â Standard pattern |
| DI Setup | getIt/injectable not needed |
| Testing | Bloc(useCase: mockUseCase) direct injection |
Key Points:
- UseCase:
const UseCase([IRepo? repo]) : _repo = repo ?? ConcreteRepo() - BLoC:
Bloc({UseCase? useCase}) : _useCase = useCase ?? const UseCase() - Test:
Bloc(useCase: mockUseCase)- getIt.reset() Not needed
-> Details: patterns/usecase-patterns.md
BLoC State Pattern Selection#
Clear state separation? âYesââš Freezed Union (ęķėĨ)
â
âNoââš Avoid code generation? âYesââš Sealed Class
â
âNoââš Single State
Detailed Comparison#
| Criteria | Freezed Union | Sealed Class | Single State |
|---|---|---|---|
| Code Generation | Required | Not needed | Required |
| State Separation | â Clear | â Clear | â ïļ Less clear |
| copyWith | â Auto | â ïļ Manual | â Auto |
| Pattern Matching | â when/map | â switch | â ïļ Conditionals |
| Recommended For | General use | Dart 3.0+, avoiding codegen | Pagination, filtering |
Selection Criteria:
- â Freezed Union: Clear Initial/Loading/Loaded/Error separation
- â Sealed Class: Type-safe without code generation
- â Single State: Multiple state combinations (isLoading + items + hasMore)
-> Details: patterns/bloc-patterns.md
Repository Implementation Pattern Selection#
Need network logic reuse? âYesââš Mixin íĻíī (ęķėĨ)
â
âNoââš Multiple data source combination? âYesââš Mixin íĻíī
â
âNoââš Direct implementation
Detailed Comparison#
| Criteria | Mixin Pattern | Direct implementation |
|---|---|---|
| Logic Reuse | â Easy | â ïļ Difficult |
| Structural Complexity | â ïļ Increased | â Simple |
| Testing | â Independent Mixin tests | â ïļ Full tests |
| Recommended For | Complex APIs, multiple data sources | Simple CRUD |
Selection Criteria:
- â Mixin Pattern: API logic reuse, caching layer separation, complex data processing
- â Direct Implementation: Simple CRUD, quick implementation, no reuse needed
-> Details: patterns/repository-patterns.md
Caching Strategy Selection#
Data changes frequently? âYesââš SWR (Stale-While-Revalidate)
â
âNoââš Need offline? âYesââš Cache-First
â
âNoââš SWR
Detailed Comparison#
| Criteria | SWR | Cache-First |
|---|---|---|
| Response Speed | â Instant (cache) + refresh | â Instant (cache) |
| Network Usage | â ïļ Called every time | â Skipped when cached |
| Data Freshness | â Latest | â ïļ Until cache expires |
| Offline Support | â ïļ Only when cached | â Cache first |
Suitable cases:
| SWR | Cache-First |
|---|---|
| Feed, timeline | User profile |
| Chat messages | App settings |
| Notification List | Category List |
| Real-time status | Static content |
-> Details: patterns/caching-patterns.md
Entity Definition Pattern Selection#
Code generation available? âYesââš Freezed (ęķėĨ)
â
âNoââš Dart 3.0+? âYesââš Final Class
â
âNoââš ėžë° Class
Detailed Comparison#
| Criteria | Freezed | Final Class | ėžë° Class |
|---|---|---|---|
| copyWith | â Auto | â ïļ Manual | â ïļ Manual |
| equality | â Auto | â ïļ Manual | â ïļ Manual |
| Immutability | â Enforced | â final Enforced | â ïļ Selection |
| JSON serialization | â Auto | â ïļ Manual | â ïļ Manual |
UI Component Selection#
Existing component available? âYesââš /coui:improve (Improvement)
â
âNoââš Form component? âYesââš /coui:form
â
âNoââš Full screen? âYesââš /coui:screen
â
âNoââš /coui:component
Test Strategy Selection#
E2E test? âYesââš /bdd:generate (BDD ėëëĶŽėĪ)
â
âNoââš BLoC test? âYesââš bloc_test íĻíĪė§
â
âNoââš Unit test? âYesââš mocktail + flutter_test
Agent Selection Guide#
Feature Development#
| Scenario | Invocation | Description |
|---|---|---|
| Full Feature creation | /feature:create |
Domain + Data + Presentation |
| Domain only | /feature:domain |
Entity, UseCase, Repository Interface |
| Data only | /feature:data | Repository impl, Cache, DAO |
| Presentation only | /feature:presentation | BLoC, Page, Widget |
| BLoC only | /feature:bloc | State management only |
Backend Development#
| Scenario | Invocation | Description |
|---|---|---|
| New model definition | /serverpod:model | .spy.yaml file creation |
| Endpoint creation | /serverpod:endpoint | API endpoints |
UI Development#
| Scenario | Invocation | Description |
|---|---|---|
| Single component | /coui:component | Buttons, cards, etc. |
| Form creation | /coui:form | Complete input form |
| Full screen | /coui:screen | Page composition |
| Existing UI improvement | /coui:improve |
Refactoring, style improvement |
Quick Reference Checklist#
When Starting a New Feature#
/serverpod:model- Backend model definition/serverpod:endpoint- API endpoints/feature:domain- Entity, UseCase Definition/feature:data- Repository Implementation/feature:presentation- BLoC, UI Implementation/bdd:generate- Test scenarios
When Selecting Patterns#
- UseCase â
patterns/usecase-patterns.md - BLoC State â
patterns/bloc-patterns.md - Repository â
patterns/repository-patterns.md - Caching â
patterns/caching-patterns.md
When Checking Workflow#
- Feature Generation â
DEPENDENCY_GRAPH.md -
Parallel Execution â
DEPENDENCY_GRAPH.md#parallel-execution-available-work
Referencing Agents#
- All
/feature:*Agents /serverpod:*Agents/coui:*Agents