LogoSkills

Pattern Selection Guide

A decision guide for selecting optimal patterns based on the situation.

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#

CriteriaOptional Constructor Injection
Recommendedโœ… Standard pattern
DI SetupgetIt/injectable not needed
TestingBloc(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#

CriteriaFreezed UnionSealed ClassSingle State
Code GenerationRequiredNot neededRequired
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#

CriteriaMixin PatternDirect 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#

CriteriaSWRCache-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:

SWRCache-First
Feed, timelineUser profile
Chat messagesApp settings
Notification ListCategory List
Real-time statusStatic 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#

CriteriaFreezedFinal 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#

ScenarioInvocationDescription
Full Feature creation /feature:create Domain + Data + Presentation
Domain only /feature:domain Entity, UseCase, Repository Interface
Data only/feature:dataRepository impl, Cache, DAO
Presentation only/feature:presentationBLoC, Page, Widget
BLoC only/feature:blocState management only

Backend Development#

ScenarioInvocationDescription
New model definition/serverpod:model.spy.yaml file creation
Endpoint creation/serverpod:endpointAPI endpoints

UI Development#

ScenarioInvocationDescription
Single component/coui:componentButtons, cards, etc.
Form creation/coui:formComplete input form
Full screen/coui:screenPage 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