2026-05-17 18:40:03 +07:00

39 lines
1.9 KiB
Markdown

# WalkGuide Design Pattern Documentation
## Builder - Creational
- Backend DTO/entity builders via Lombok `@Builder`.
- Files: `PairingStatusResponse.java`, `AgoraTokenResponse.java`, entity classes such as `PairingRelation.java`.
- Reason: response/entity construction has many optional fields, so builder calls are clearer than long constructors.
## Singleton / Service Locator - Creational
- Flutter registers app-wide services once with GetIt.
- File: `walkguide-mobile/walkguide_app/lib/app/injection_container.dart`.
- Examples: `TtsService`, `WebSocketService`, `CallService`, `YoloDetector`.
- Reason: resource-heavy services need one shared lifecycle.
## Facade - Structural
- Flutter service classes hide low-level plugins from UI.
- Files: `TtsService`, `HapticService`, `FcmService`, `CallService`, `WebSocketService`.
- Reason: screens call simple domain-oriented methods instead of plugin APIs directly.
## Repository - Structural
- Backend repositories abstract JPA persistence.
- Files: `UserRepository`, `PairingRelationRepository`, `LocationHistoryRepository`, etc.
- Reason: service layer works against repository contracts, not SQL.
## Observer - Behavioral
- Flutter BLoC/Cubit and ChangeNotifier notify screens on state changes.
- Backend WebSocket broker pushes location/SOS/notification updates to subscribers.
- Files: `AppCubit`, `WebSocketService`, `LocationBroadcaster`.
- Reason: real-time features need push updates without polling.
## Strategy - Behavioral
- Obstacle direction/distance analysis can vary independently from camera capture.
- File: `core/ai/obstacle_analyzer.dart`.
- Reason: detection interpretation is isolated so thresholds/rules can evolve.
## Chain of Responsibility - Behavioral
- Dio interceptors handle token injection, refresh, and error flow.
- File: `core/network/api_client.dart`.
- Reason: each request passes through consistent auth/error handling before reaching UI.