Architecture du projet Kotlin : Torque Graph
·2 mins
Sommaire
Torque Graph est une application Android développée en Kotlin suivant une architecture hexagonale (ou en couches) :
- domain : logique métier pure
- infrastructure : intégrations concrètes (Bluetooth, permissions…)
- application : cas d’usage et services
- presentation : interface utilisateur (Compose UI)
- shared : modules communs et utilitaires
Structure du projet #
app/src/main/java/fr/gildasld/torque_graph
├── application
│ ├── services
│ └── use_cases
├── domain
│ ├── models
│ │ ├── SmartDriver.kt
│ │ └── WriteStatus.kt
│ └── repositories
│ └── SmartDriverRepository.kt
├── infrastructure
│ ├── permissions
│ │ └── PermissionHandler.kt
│ └── smart_driver
│ ├── bluetooth
│ │ ├── BluetoothConnectionManager.kt
│ │ ├── BluetoothEnabler.kt
│ │ ├── CommandSender.kt
│ │ └── FrameParser.kt
│ ├── FrameValidator.kt
│ ├── ParsedResponse.kt
│ └── RfcommSmartDriverRepository.kt
├── MainActivity.kt
├── presentation
│ ├── view_models
│ │ ├── PermissionViewModel.kt
│ │ └── TorquePositioningViewModel.kt
│ └── views
│ ├── components
│ │ ├── Background.kt
│ │ ├── Color.kt
│ │ ├── Logo.kt
│ │ └── TextButton.kt
│ └── torque_measurement
│ └── TorqueMeasurementView.kt
└── shared
└── filters
└── Filter.kt
Diagramme d’architecture globale #
graph TD
A[MainActivity] --> B[presentation]
B -->|ViewModel| C[application]
C -->|Use cases| D[domain]
D -->|Interfaces| E[infrastructure]
E -->|Implémentations concrètes| D
B --> UI[Jetpack Compose Views]
UI --> VM[ViewModels]
E --> BLE[BluetoothConnectionManager]
E --> Repo[RfcommSmartDriverRepository]
D --> RepoI[SmartDriverRepository]
Diagramme de classes : module Bluetooth #
classDiagram
class BluetoothConnectionManager {
+connect(device: BluetoothDevice)
+disconnect()
+listen()
}
class BluetoothEnabler {
+enableBluetooth()
+isEnabled(): Boolean
}
class CommandSender {
+sendCommand(cmd: String)
}
class FrameParser {
+parseFrame(data: ByteArray): ParsedResponse
}
class FrameValidator {
+validate(frame: ByteArray): Boolean
}
class ParsedResponse {
+torque: Float
+status: String
}
class RfcommSmartDriverRepository {
+readTorque(): Float
+writeCommand(cmd: String): WriteStatus
}
RfcommSmartDriverRepository --> BluetoothConnectionManager
RfcommSmartDriverRepository --> CommandSender
RfcommSmartDriverRepository --> FrameParser
FrameParser --> FrameValidator
FrameParser --> ParsedResponse
Diagramme de séquence : acquisition de couple #
sequenceDiagram
autonumber
participant U as Utilisateur
participant V as VueMesure
participant VM as ViewModel
participant R as Repo
U->>V: Ouvre l’écran
V->>VM: Demande le couple
VM->>R: Lit et parse les données
R-->>VM: Valeur de couple
VM-->>V: Met à jour affichage
V-->>U: Affiche couple
Diagramme entité-relation simplifié #
erDiagram
SMART_DRIVER {
string id
string name
string mac_address
}
TORQUE_READING {
int id
float torque_value
datetime timestamp
string driver_id
}
SMART_DRIVER ||--o{ TORQUE_READING : "produit"
Technologies principales #
- Langage : Kotlin
- Architecture : Clean / Hexagonale
- UI : Jetpack Compose
- Bluetooth : RFCOMM (SPP)
- Gestion des permissions : PermissionHandler
- Communication inter-couches : Repository pattern
Fonctionnalités #
- Connexion à un couplemètre Bluetooth RFCOMM
- Lecture du couple moteur en continu
- Interface graphique fluide et réactive
- Gestion des permissions Android modernes
- Validation et parsing des trames Bluetooth