39 lines
1.9 KiB
Markdown
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.
|