Modern Mobile Engineering
Chapitre 25
25 - Annexes
25 - Annexes
25 - Annexes
Objectifs pédagogiques
À la fin de ce chapitre, vous serez capable de :
- Retrouver la définition de plus de 200 termes du vocabulaire mobile
- Consulter les cheat sheets Kotlin, Swift, Compose, SwiftUI, Dart, Flutter et React Native
- Reconnaître et appliquer les design patterns mobile
- Utiliser ces annexes comme référence rapide pendant le cours et en production
Plan du chapitre
| Section | Sujet |
|---|---|
| 1 | Glossaire (200+ termes) |
| 2 | Cheat sheet Kotlin |
| 3 | Cheat sheet Swift |
| 4 | Cheat sheet Jetpack Compose |
| 5 | Cheat sheet SwiftUI |
| 6 | Cheat sheet Dart |
| 7 | Cheat sheet Flutter |
| 8 | Cheat sheet React Native |
| 9 | Design patterns mobile |
Fichiers du chapitre
| Fichier | Contenu |
|---|---|
course.md | Glossaire + cheat sheets + patterns (700+ lignes) |
references/README.md | Sources et approfondissements |
Temps estimé
- Lecture du glossaire : 1 h
- Parcours des cheat sheets : 2 h
- Exercices d'application : 3 h
Section 1 — Glossaire (200+ termes)
1.1 Langages et fondamentaux (25 termes)
| Terme | Définition |
|---|---|
| Kotlin | Langage JVM moderne, recommandé par Google pour Android (null-safety, coroutines). |
| Swift | Langage d'Apple, sûr, rapide, moderne (optionals, value types). |
| Dart | Langage de Flutter, compilé AOT pour le mobile, JIT en dev. |
| TypeScript | Superset JavaScript typé, utilisé avec React Native. |
| Null-safety | Système empêchant l'usage d'une valeur potentiellement nulle sans contrôle. |
| Optionnel | Type qui peut être vide (nil / null) ; String? en Swift/Kotlin. |
| Data class | Classe Kotlin générant equals/hashCode/copy/toString. |
| Struct | Type valeur Swift (copie à l'assignation). |
| Enum | Type énuméré ; en Swift, peut porter des valeurs associées. |
| Generics | Programmation paramétrée par types (List<T>). |
| Extension | Fonction/propriété ajoutée à un type sans le modifier (Kotlin/Swift). |
| Protocol | Contrat d'interface en Swift, équivalent d'une interface Kotlin. |
| Closure | Bloc de code capturant son contexte (Swift). |
| Lambda | Fonction anonyme (Kotlin/Java). |
| Collection | Ensemble de valeurs (List, Set, Map). |
| Immutabilité | État qui ne change jamais ; évite les bugs de concurrence. |
| Garbage Collector | Libération automatique de la mémoire non référencée (JVM/Dart). |
| ARC | Gestion de mémoire par comptage de références (Swift/Objective-C). |
| Compile-time | Ce qui est vérifié par le compilateur avant exécution. |
| Runtime | Ce qui se produit pendant l'exécution. |
| Debug/Release | Modes de build : développement vs production optimisée. |
| Bytecode | Code intermédiaire exécuté par la JVM ou Dart VM. |
| AOT | Ahead-Of-Time : compilation avant exécution (Dart en release). |
| JIT | Just-In-Time : compilation à l'exécution (Dart en dev, JVM). |
| Stack/Heap | Mémoire : pile (calls) et tas (objets). |
1.2 Android (30 termes)
| Terme | Définition |
|---|---|
| Activity | Écran/point d'entrée avec cycle de vie propre. |
| Fragment | Portion d'UI réutilisable avec son propre cycle de vie. |
| Service | Composant de fond sans UI. |
| BroadcastReceiver | Écoute d'événements système (batterie, boot…). |
| ContentProvider | Interface de partage de données entre apps. |
| Intent | Message de demande d'action (explicite/implicite). |
| Manifest | AndroidManifest.xml : déclare composants et permissions. |
| Gradle | Système de build Android. |
| KTS | Scripts Gradle écrits en Kotlin (build.gradle.kts). |
| APK | Paquet d'installation Android. |
| AAB | Android App Bundle : paquet optimisé pour le Play Store. |
| SDK | Software Development Kit : outils et API. |
| minSdk/targetSdk | Versions minimales/cibles d'Android. |
| Jetpack | Suite de bibliothèques Android (Compose, Room, Navigation…). |
| ViewModel | Classe qui prépare et expose les données, survit à la rotation. |
| LiveData | Conteneur de données observables lié au cycle de vie. |
| StateFlow | Flux de données d'état (hot), recommandé avec Compose. |
| Compose | Toolkit UI déclarative Android (Kotlin). |
| Recomposition | Re-exécution d'un composable quand son état change. |
| LazyColumn | Liste paresseuse Compose. |
| Room | Couche d'abstraction SQLite typée. |
| DAO | Data Access Object : interface de requêtes. |
| Entity | Classe mappée à une table (Room). |
| View Binding | Liaison typée des vues XML. |
| RecyclerView | Liste virtuelle de vues (legacy pré-Compose). |
| WorkManager | Planification de travaux de fond garantis. |
| AlarmManager | Alarmes à heure précise. |
| Notification Channel | Catégorie de notifications (Android 8+). |
| Runtime permission | Permission demandée à l'exécution (dangerous). |
| Application class | Classe racine de l'app (initialisations globales). |
1.3 iOS (30 termes)
| Terme | Définition |
|---|---|
| UIKit | Framework impératif d'UI iOS. |
| SwiftUI | Framework déclaratif d'UI (2019). |
| View | Composant d'UI SwiftUI / type de base UIKit. |
| AppDelegate | Point d'entrée gérant le cycle de vie de l'app. |
| SceneDelegate | Gestion des scènes (multi-fenêtres, iPad). |
| ViewController | Contrôleur UIKit d'un écran. |
| Storyboard | Fichier de description visuelle de l'UI (legacy). |
| Auto Layout | Système de contraintes de layout UIKit. |
| NavigationStack | Pile de navigation SwiftUI. |
| NavigationController | Pile de navigation UIKit. |
| TabView / TabBar | Navigation par onglets. |
| @State | Propriété d'état local SwiftUI. |
| @Binding | Référence à une valeur possédée ailleurs. |
| @Environment | Valeur fournie par l'environnement (thème, modèles). |
| @Observable | Macro Swift de gestion d'état (5.9+). |
| ObservableObject | Classe observable Combine (legacy). |
| Combine | Framework réactif d'Apple (Publishers/Subscribers). |
| async/await | Syntaxe de concurrence moderne Swift. |
| async let | Lancement de tâches parallèles. |
| TaskGroup | Groupe de tâches concurrentes avec agrégation. |
| Actor | Type protégeant son état mutable de la course. |
| @MainActor | Isolateur exécutant sur le thread principal. |
| Sendable | Type sûr à traverser les frontières de concurrence. |
| Protocol | Contrat de conformité. |
| Optional | Type pouvant être nil. |
| guard let | Déballage conditionnel précoce (early exit). |
| if let | Déballage conditionnel local. |
| Weak/Unowned | Références faibles pour éviter les cycles ARC. |
| Deinit | Destructeur de classe (nettoyage). |
| Keychain | Stockage sécurisé de secrets. |
1.4 Cross-platform (25 termes)
| Terme | Définition |
|---|---|
| React Native | Framework RN : JS/TS + composants natifs. |
| Flutter | Framework Google : Dart + moteur de rendu propre. |
| PWA | App web installable, offline, avec notifications. |
| Bridge | Pont JS ↔ natif (RN legacy). |
| JSI | Interface JavaScript pour accès natif synchrone (RN). |
| Fabric | Nouveau renderer RN. |
| TurboModules | Modules natifs chargés à la demande (RN). |
| Hermes | Moteur JS optimisé pour RN. |
| Widget | Unité d'UI Flutter. |
| StatelessWidget | Widget Flutter immuable. |
| StatefulWidget | Widget Flutter avec état (setState). |
| BuildContext | Position d'un widget dans l'arbre. |
| InheritedWidget | Partage de données dans l'arbre Flutter. |
| ValueNotifier | Conteneur de valeur observable Flutter. |
| Provider | Package de gestion d'état Flutter. |
| Riverpod | Package d'état Flutter moderne. |
| Bloc | Pattern état Flutter basé sur events. |
| Hot Reload | Mise à jour de l'UI sans relance de l'app (dev). |
| Hook | Fonction React de réutilisation d'état. |
| useState | Hook d'état local. |
| useEffect | Hook d'effets (montage, mises à jour, cleanup). |
| useCallback | Mémorisation d'une fonction. |
| useMemo | Mémorisation d'une valeur. |
| VirtualizedList | Liste RN virtualisée (FlatList/SectionList). |
| Expo | Plateforme et framework pour RN. |
1.5 Architecture et données (30 termes)
| Terme | Définition |
|---|---|
| MVVM | Model-View-ViewModel : séparation état/UI/logique. |
| MVI | Model-View-Intent : flux unidirectionnel. |
| Clean Architecture | Couches découplées (domain/data/presentation). |
| SOLID | Principes de conception orientée objet. |
| Single Responsibility | Une classe, une responsabilité. |
| Dependency Inversion | Dépendre des abstractions. |
| Use Case | Règle métier orchestrée (cas d'usage). |
| Repository | Abstraction d'accès aux données (sources multiples). |
| Data Source | Source brute (API, base). |
| DI (Injection de dépendances) | Fournir les dépendances de l'extérieur. |
| Hilt | Framework DI Android basé sur Dagger. |
| Koin | DI Kotlin simple. |
| Singleton | Instance unique d'un objet. |
| Factory | Pattern de création d'objets. |
| Observer | Pattern de notification de changements. |
| State Machine | Modèle d'états et transitions. |
| Sealed class | Hiérarchie de types fermée (Kotlin). |
| ADR | Architecture Decision Record : trace d'une décision. |
| SQLite | Base relationnelle embarquée. |
| Room | ORM SQLite Android. |
| CoreData | Persistance Apple (relationnelle + graphique). |
| NSManagedObject | Objet persistant CoreData. |
| FetchRequest | Requête CoreData. |
| Migration | Évolution du schéma préservant les données. |
| ORM | Object-Relational Mapping. |
| Cache | Stockage temporaire pour accélérer les accès. |
| TTL | Time To Live : durée de validité d'un cache. |
| Offline-first | Conception locale d'abord, synchronisation ensuite. |
| SharedPreferences | Stockage clé/valeur Android (non sécurisé). |
| UserDefaults | Stockage clé/valeur iOS (non sécurisé). |
1.6 Networking et backend (20 termes)
| Terme | Définition |
|---|---|
| HTTP | Protocole de transfert de documents. |
| HTTPS | HTTP chiffré par TLS. |
| REST | Style d'API basé sur les ressources. |
| JSON | Format de données texte structuré. |
| API | Interface de programmation applicative. |
| Endpoint | Adresse d'une ressource d'API. |
| Retrofit | Client HTTP typé Android. |
| OkHttp | Client HTTP de bas niveau (base de Retrofit). |
| Interceptor | Middleware sur requêtes/réponses OkHttp. |
| URLSession | Framework réseau iOS. |
| Alamofire | Bibliothèque réseau iOS (optionnelle). |
| WebSocket | Canal bidirectionnel temps réel. |
| SSE | Server-Sent Events : flux serveur→client. |
| Push | Notification distante (FCM/APNs). |
| FCM | Firebase Cloud Messaging (Android). |
| APNs | Apple Push Notification service. |
| WebView | Vues web embarquées. |
| CORS | Politique d'accès cross-origin (web). |
| MockWebServer | Serveur de test local (OkHttp). |
| TLS/SSL | Protocoles de chiffrement de transport. |
1.7 Testing et DevOps (25 termes)
| Terme | Définition |
|---|---|
| Test unitaire | Test isolé et rapide d'une unité de code. |
| Test d'intégration | Test de plusieurs composants ensemble. |
| Test UI | Test du comportement de l'interface. |
| Test E2E | Test du parcours complet sur device. |
| AAA | Arrange – Act – Assert. |
| TDD | Test-Driven Development : tests d'abord. |
| Fake | Implémentation simulée d'une dépendance. |
| Mock | Doublure avec comportements programmés. |
| Spy | Doublure qui enregistre les appels. |
| Coverage | Part de code couverte par les tests. |
| JUnit | Framework de tests unitaires JVM. |
| XCTest | Framework de tests Apple. |
| Espresso | Tests UI Android (legacy). |
| Maestro | Outil E2E mobile YAML. |
| Flaky test | Test intermittent. |
| Snapshot test | Comparaison de rendu à une référence. |
| CI/CD | Intégration et déploiement continus. |
| Pipeline | Chaîne automatisée de build/test/déploiement. |
| Fastlane | Automatisation iOS/Android. |
| GitHub Actions | CI/CD intégré à GitHub. |
| TestFlight | Distribution bêta iOS. |
| Firebase App Distribution | Distribution bêta Android/iOS. |
| Crashlytics | Analyse des crashs. |
| dSYM | Symboles de crash iOS. |
| SonarQube | Analyse statique de qualité. |
1.8 Sécurité et divers (20 termes)
| Terme | Définition |
|---|---|
| OWASP MASVS | Standard de sécurité mobile. |
| Chiffrement | Transformation des données pour les rendre illisibles. |
| AES | Algorithme de chiffrement symétrique. |
| RSA | Chiffrement asymétrique (clés publique/privée). |
| TLS | Chiffrement en transit. |
| Keystore | Stockage sécurisé de clés Android. |
| Keychain | Stockage sécurisé de secrets iOS. |
| Code signing | Signature cryptographique de l'app. |
| Certificate pinning | Épinglage des certificats attendus. |
| Sandbox | Isolation d'une app par l'OS. |
| RGPD | Règlement européen sur la protection des données. |
| ProGuard/R8 | Obfuscation et minification Android. |
| Root/Jailbreak | Débridage du device (risque de sécurité). |
| App Store | Store iOS. |
| Play Store | Store Android. |
| Material Design | Design system Google. |
| HIG | Human Interface Guidelines (Apple). |
| Accessibility | Accessibilité (voix, contraste, tailles). |
| Dark mode | Thème sombre. |
| Localisation | Traduction et adaptation régionale. |
Total : 25 + 30 + 30 + 25 + 30 + 20 + 25 + 20 = 205 termes.
Section 2 — Cheat sheet Kotlin
Variables et types
val name = "Ada" // immuable (read-only)
var age = 36 // mutable
val email: String? = null // null-safe
val list = listOf(1, 2, 3) // liste immuable
val map = mapOf("a" to 1, "b" to 2)
val set = setOf(1, 2, 2) // {1, 2}
Fonctions et classes
fun add(a: Int, b: Int) = a + b // expression body
data class User(val id: Int, val name: String) // equals/hash/copy
fun User.displayName(): String = name // extension function
val user = User(1, "Ada")
val copy = user.copy(name = "Grace")
Null-safety
val a: String? = null
a?.length // null si a est null
a ?: "default" // Elvis : valeur par défaut
a!! // force (à éviter !)
val len: Int = a?.length ?: 0
Coroutines
viewModelScope.launch {
val result = withContext(Dispatchers.IO) { fetch() }
uiState.value = result
}
val deferred = async { fetchA() } // parallèle
val b = async { fetchB() }
launch { doSomething() } // fire-and-forget
flow { emit(1); emit(2) } // Flow froid
flow.map { it * 2 }.filter { it > 1 }.collect { ... }
Collections (fonctionnelles)
list.filter { it > 1 }
list.map { it * 2 }
list.fold(0) { acc, x -> acc + x }
list.any { it > 5 }
list.groupBy { it % 2 }
list.sortedBy { it }
Section 3 — Cheat sheet Swift
Variables et types
let name = "Ada" // constante
var age = 36 // variable
var email: String? = nil // optionnelle
let list = [1, 2, 3] // Array
let dict = ["a": 1, "b": 2] // Dictionary
let set: Set<Int> = [1, 2, 3]
Optionals
var name: String? = "Ada"
if let name = name { print(name) } // if let
guard let name = name else { return } // guard (early exit)
let count = name?.count ?? 0 // ?? et chaînage
Struct / Enum / Protocol
struct User: Identifiable {
let id: Int
var name: String
}
enum Status {
case pending, active, done
}
protocol Processable {
func process() async throws
}
extension Processable {
func log() { print("processing") } // implémentation par défaut
}
Fonctions et closures
func add(_ a: Int, _ b: Int) -> Int { a + b } // label omis
let multiply = { (a: Int, b: Int) -> Int in a * b }
let values = [1, 2, 3].map { $0 * 2 }
Concurrence
func load() async throws -> Data {
let (data, response) = try await URLSession.shared.data(from: url)
return data
}
async let a = fetchA() // parallèle
async let b = fetchB()
let results = try await (a, b)
actor Counter {
private var value = 0
func increment() { value += 1 }
}
Erreurs
enum AppError: Error { case network, notFound }
func fetch() throws -> Data { ... }
do { try fetch() } catch { print(error) }
Section 4 — Cheat sheet Jetpack Compose
Composables et état
@Composable
fun Counter() {
var count by remember { mutableStateOf(0) }
Button(onClick = { count++ }) { Text("$count") }
}
Disposition
Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
Row(horizontalArrangement = Arrangement.SpaceBetween) { ... }
Box(modifier = Modifier.fillMaxSize()) { ... } // empilement
}
Listes
LazyColumn {
items(items = list, key = { it.id }) { item -> ... }
}
Thème
MaterialTheme(
colorScheme = if (darkTheme) darkColorScheme() else lightColorScheme(),
typography = Typography()
) { ... }
Navigation
NavHost(navController, startDestination = "home") {
composable("home") { HomeScreen(onClick = { navController.navigate("detail/1") }) }
composable("detail/{id}") { backStackEntry -> DetailScreen(backStackEntry.arguments?.getString("id")) }
}
Modificateurs utiles
Modifier
.fillMaxWidth().padding(16.dp)
.clickable { ... }
.clip(RoundedCornerShape(8.dp))
.background(color)
.size(48.dp)
Section 5 — Cheat sheet SwiftUI
Vues et état
struct CounterView: View {
@State private var count = 0
var body: some View {
Button("\(count)") { count += 1 }
}
}
Disposition
VStack(spacing: 8) {
HStack { Text("A"); Spacer(); Text("B") }
ZStack { Circle(); Text("badge").offset(...) }
ScrollView { ForEach(items) { item in Text(item.title) } }
}
Listes et navigation
NavigationStack {
List(users) { user in
NavigationLink(value: user) { Text(user.name) }
}
.navigationDestination(for: User.self) { user in UserDetail(user: user) }
}
Concurrence dans la vue
.task { await viewModel.load() } // annulé automatiquement
Préviews
#Preview {
ContentView()
.environment(\.colorScheme, .dark)
}
Modificateurs clés
Text("Hello")
.font(.title)
.foregroundStyle(.blue)
.padding()
.background(RoundedRectangle(cornerRadius: 8))
.frame(maxWidth: .infinity)
.onTapGesture { ... }
Section 6 — Cheat sheet Dart
Variables et types
final name = 'Ada'; // read-only
var age = 36; // mutable
String? email; // nullable
final list = [1, 2, 3];
final map = {'a': 1, 'b': 2};
final set = {1, 2, 3};
Fonctions et classes
int add(int a, int b) => a + b;
class User {
final int id;
final String name;
const User(this.id, this.name);
}
Contrôle de flux
if (email == null) { ... } else { ... }
switch (status) {
case Status.active: ...
default: ...
}
for (final item in list) { ... }
list.where((e) => e > 1).map((e) => e * 2).toList();
Async
Future<int> fetch() async {
final data = await api.get('/data');
return data.length;
}
final value = await fetch();
try { await fetch(); } catch (e) { print(e); }
Stream<int> counter() async* { for (var i = 0; i < 3; i++) { yield i; } }
Null-safety
String? name;
final len = name?.length ?? 0; // chaînage + fallback
name!; // force (à éviter)
Section 7 — Cheat sheet Flutter
Widgets de base
Text('Bonjour', style: TextStyle(fontSize: 18)),
Icon(Icons.favorite, color: Colors.red),
Image.network('https://...'),
ElevatedButton(onPressed: () {}, child: Text('OK')),
TextField(controller: controller),
Layouts
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [ Text('A'), const SizedBox(height: 8), Text('B') ],
),
Row(mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [...]),
Stack(children: [ base, Positioned(right: 0, top: 0, child: badge) ]),
Listes
ListView.builder(
itemCount: items.length,
itemBuilder: (context, index) => ListTile(title: Text(items[index])),
)
GridView.count(crossAxisCount: 2, children: [...])
État
class MyWidget extends StatefulWidget { ... }
class _MyWidgetState extends State<MyWidget> {
int count = 0;
void _inc() => setState(() => count++);
@override
Widget build(BuildContext context) { return ...; }
}
Thème
MaterialApp(
theme: ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: Colors.teal)),
darkTheme: ThemeData(...brightness: Brightness.dark),
home: const HomeScreen(),
)
Navigation
Navigator.push(context, MaterialPageRoute(builder: (_) => const Detail()));
Navigator.pop(context);
Section 8 — Cheat sheet React Native
Hooks
const [count, setCount] = useState(0);
useEffect(() => {
fetchData();
return () => cleanup(); // cleanup au démontage
}, [deps]);
const memoized = useMemo(() => compute(a, b), [a, b]);
const handler = useCallback(() => doThing(), [deps]);
Composants
<View style={{ flex: 1, justifyContent: 'center' }}>
<Text style={styles.title}>Bonjour</Text>
<Pressable onPress={() => setCount(c => c + 1)}>
<Text>+</Text>
</Pressable>
</View>
Listes
<FlatList
data={items}
keyExtractor={(item) => item.id}
renderItem={({ item }) => <Item item={item} />}
getItemLayout={...}
/>
Style
const styles = StyleSheet.create({
title: { fontSize: 20, fontWeight: 'bold', color: '#333' },
});
Navigation (React Navigation)
<NavigationContainer>
<Stack.Navigator>
<Stack.Screen name="Home" component={HomeScreen} />
</Stack.Navigator>
</NavigationContainer>
navigation.navigate('Detail', { id });
Réseau
const res = await fetch(url, { method: 'GET' });
const data = await res.json();
Section 9 — Design patterns mobile
9.1 Patterns de création
| Pattern | Usage mobile |
|---|---|
| Singleton | Accès global à un service (logger, repository partagé) — avec prudence |
| Factory | Création de vues/widgets selon un type (ex. renderers) |
| Builder | Construction d'objets complexes (requêtes, configurations) |
| Dependency Injection | Fournir les dépendances (Hilt, Koin, manual) |
9.2 Patterns de structure
| Pattern | Usage mobile |
|---|---|
| Adapter | RecyclerView.Adapter / listes RN — adapter données → vues |
| Facade | Encapsuler plusieurs services derrière une API simple (ex. AnalyticsManager) |
| Decorator | Envelopper des composants (modifiers, ViewModifiers) |
| Composite | L'arbre de widgets/views (parent-enfant) |
9.3 Patterns de comportement
| Pattern | Usage mobile |
|---|---|
| Observer | Observables : LiveData, StateFlow, Publisher, ValueNotifier |
| State | Gestion d'état UI (state machine de chargement) |
| Strategy | Échanger des algorithmes (différents paiements, formats) |
| Command | Encapsuler des actions (undo, redo, file de synchronisation) |
| Template Method | Squelette d'algorithme avec hooks de sous-classe |
| Chain of Responsibility | Intercepteurs OkHttp, middleware |
| Iterator | Parcours de collections |
9.4 Patterns d'architecture mobile
| Pattern | Description |
|---|---|
| MVVM | ViewModel expose l'état ; l'UI observe |
| MVI | Flux unidirectionnel : Intent → State → View |
| Clean Architecture | Couches domain/data/presentation découplées |
| Repository | Source unique d'accès aux données |
| Use Case | Une règle métier par classe |
| Redux | Store global + reducers (inspiration de MVI) |
| Coordinator (iOS) | Navigation découplée des écrans |
| VIPER (iOS) | View-Interactor-Presenter-Entity-Router |
9.5 Patterns de performance
| Pattern | Usage |
|---|---|
| ViewHolder | Réutiliser des vues (RecyclerView) |
| Virtualization | FlatList/ListView.builder — items paresseux |
| Cache | Mémoire + disque pour images, requêtes |
| Lazy Loading | Chargement différé des données |
| Debounce | Limiter les événements fréquents (recherche) |
| Throttle | Limiter le taux d'exécution |
| Page Cache | Mise en cache des écrans navigués |
9.6 Anti-patterns à éviter
| Anti-pattern | Problème |
|---|---|
| God Object | Une classe qui fait tout |
| Business logic dans l'UI | Impossible à tester, duplication |
| Spaghetti code | Flux illisible |
| Premature optimization | Optimiser sans mesure |
| Copy-paste | Duplication → bug propagation |
| Singleton partout | Couplage global, tests difficiles |
| Mutable global state | Incohérences, courses |
Synthèse
- Glossaire : 205 termes couvrant langages, plateformes, architecture, data, réseau, tests, DevOps, sécurité.
- Cheat sheets : 7 références rapides pour Kotlin, Swift, Compose, SwiftUI, Dart, Flutter, RN.
- Patterns : création, structure, comportement, architecture, performance — avec leurs usages mobiles.
Pour aller plus loin
- Imprimez ou gardez les cheat sheets ouvertes pendant vos exercices du chapitre 19.
- Pour chaque pattern, trouvez un exemple réel dans vos projets (ou dans Now in Android).
- Complétez le glossaire avec vos propres termes rencontrés en production.