Aller au contenu
  1. Portfolio/

Architecture du projet Kotlin : Torque Graph

·2 mins

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