@the-bearded-bear/claude-craft 8.8.1 → 8.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Dev/i18n/de/Angular/commands/check-compliance.md +218 -168
- package/Dev/i18n/de/Common/agents/refactoring-specialist.md +146 -69
- package/Dev/i18n/de/Common/commands/add-technology.md +166 -68
- package/Dev/i18n/de/Common/commands/setup-ci.md +216 -33
- package/Dev/i18n/de/Laravel/commands/check-compliance.md +223 -115
- package/Dev/i18n/de/Python/checklists/new-feature.md +319 -44
- package/Dev/i18n/de/React/rules/02-architecture.md +483 -322
- package/Dev/i18n/de/React/rules/03-coding-standards.md +584 -368
- package/Dev/i18n/de/Symfony/commands/check-compliance.md +186 -114
- package/Dev/i18n/de/Symfony/rules/07-testing-symfony.md +679 -10
- package/Dev/i18n/de/UIUX/commands/a11y-component.md +284 -26
- package/Dev/i18n/de/UIUX/commands/design-tokens.md +199 -35
- package/Dev/i18n/de/UIUX/commands/user-flow.md +179 -16
- package/Dev/i18n/de/VueJS/commands/check-compliance.md +227 -102
- package/Dev/i18n/es/Angular/commands/check-compliance.md +217 -167
- package/Dev/i18n/es/Common/commands/add-technology.md +158 -60
- package/Dev/i18n/es/Laravel/commands/check-compliance.md +223 -115
- package/Dev/i18n/es/React/commands/check-testing.md +263 -169
- package/Dev/i18n/es/ReactNative/commands/check-testing.md +256 -198
- package/Dev/i18n/es/Symfony/commands/check-compliance.md +189 -117
- package/Dev/i18n/es/Symfony/commands/check-testing.md +301 -102
- package/Dev/i18n/es/Symfony/commands/migration-plan.md +267 -34
- package/Dev/i18n/es/UIUX/commands/a11y-component.md +274 -16
- package/Dev/i18n/es/UIUX/commands/design-tokens.md +186 -22
- package/Dev/i18n/es/UIUX/commands/user-flow.md +173 -10
- package/Dev/i18n/es/VueJS/commands/check-compliance.md +227 -102
- package/Dev/i18n/fr/Angular/commands/check-compliance.md +217 -167
- package/Dev/i18n/fr/Common/commands/ralph-run.md +138 -60
- package/Dev/i18n/fr/Laravel/commands/check-compliance.md +223 -115
- package/Dev/i18n/fr/React/commands/check-architecture.md +370 -53
- package/Dev/i18n/fr/React/commands/check-code-quality.md +454 -64
- package/Dev/i18n/fr/React/commands/check-testing.md +476 -102
- package/Dev/i18n/fr/Symfony/commands/check-compliance.md +188 -116
- package/Dev/i18n/fr/VueJS/commands/check-compliance.md +227 -102
- package/Dev/i18n/pt/Angular/commands/check-compliance.md +225 -175
- package/Dev/i18n/pt/Common/agents/ralph-conductor.md +211 -30
- package/Dev/i18n/pt/Common/commands/add-technology.md +149 -51
- package/Dev/i18n/pt/Common/commands/ralph-run.md +239 -35
- package/Dev/i18n/pt/Flutter/commands/analyze-performance.md +331 -46
- package/Dev/i18n/pt/Flutter/commands/check-compliance.md +234 -29
- package/Dev/i18n/pt/Flutter/commands/generate-feature.md +526 -51
- package/Dev/i18n/pt/Flutter/commands/generate-widget.md +515 -27
- package/Dev/i18n/pt/Flutter/commands/golden-update.md +322 -46
- package/Dev/i18n/pt/Flutter/commands/localization-check.md +278 -37
- package/Dev/i18n/pt/Laravel/commands/check-compliance.md +212 -104
- package/Dev/i18n/pt/React/commands/accessibility-check.md +151 -42
- package/Dev/i18n/pt/React/commands/bundle-analyze.md +300 -25
- package/Dev/i18n/pt/React/commands/check-architecture.md +369 -34
- package/Dev/i18n/pt/React/commands/check-code-quality.md +440 -34
- package/Dev/i18n/pt/React/commands/check-compliance.md +232 -62
- package/Dev/i18n/pt/React/commands/check-security.md +370 -31
- package/Dev/i18n/pt/React/commands/check-testing.md +473 -43
- package/Dev/i18n/pt/React/commands/generate-component.md +454 -19
- package/Dev/i18n/pt/React/commands/generate-hook.md +425 -24
- package/Dev/i18n/pt/React/commands/storybook-story.md +520 -35
- package/Dev/i18n/pt/ReactNative/commands/app-size.md +358 -387
- package/Dev/i18n/pt/ReactNative/commands/check-code-quality.md +246 -75
- package/Dev/i18n/pt/ReactNative/commands/check-compliance.md +191 -85
- package/Dev/i18n/pt/ReactNative/commands/check-security.md +363 -115
- package/Dev/i18n/pt/ReactNative/commands/check-testing.md +269 -79
- package/Dev/i18n/pt/ReactNative/commands/generate-screen.md +491 -324
- package/Dev/i18n/pt/ReactNative/commands/native-module.md +539 -82
- package/Dev/i18n/pt/ReactNative/commands/store-prepare.md +429 -185
- package/Dev/i18n/pt/ReactNative/rules/02-architecture.md +1084 -31
- package/Dev/i18n/pt/Symfony/commands/check-compliance.md +195 -123
- package/Dev/i18n/pt/UIUX/commands/a11y-audit.md +208 -24
- package/Dev/i18n/pt/UIUX/commands/a11y-component.md +281 -23
- package/Dev/i18n/pt/UIUX/commands/design-tokens.md +197 -33
- package/Dev/i18n/pt/UIUX/commands/user-flow.md +183 -20
- package/Dev/i18n/pt/VueJS/commands/check-compliance.md +228 -103
- package/Dev/i18n/pt/Workflow/commands/analyze.md +147 -146
- package/Dev/i18n/pt/Workflow/commands/design.md +205 -204
- package/Dev/i18n/pt/Workflow/commands/implement.md +184 -184
- package/Project/i18n/de/Sprint/commands/dev.md +339 -86
- package/Project/i18n/es/Sprint/commands/dev.md +342 -91
- package/Project/i18n/pt/Sprint/commands/dev.md +343 -92
- package/bundles/cursor/.cursorrules +1 -1
- package/bundles/windsurf/.windsurfrules +1 -1
- package/package.json +1 -1
|
@@ -1,74 +1,352 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: Vérification de
|
|
3
|
-
argument-hint: [arguments]
|
|
2
|
+
description: Vérification de la Conformité Architecturale
|
|
4
3
|
---
|
|
5
4
|
|
|
6
|
-
# Vérification de
|
|
5
|
+
# Vérification de la Conformité Architecturale
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
Vérifie que le projet suit les patterns architecturaux établis et les meilleures pratiques.
|
|
9
8
|
|
|
10
|
-
|
|
9
|
+
## Ce que fait cette commande
|
|
10
|
+
|
|
11
|
+
1. **Analyse Architecturale**
|
|
12
|
+
- Vérifier la structure des dossiers
|
|
13
|
+
- Contrôler la séparation des responsabilités
|
|
14
|
+
- Valider l'organisation des composants
|
|
15
|
+
- Vérifier les directions de dépendance
|
|
16
|
+
- Vérifier les patterns de conception
|
|
17
|
+
|
|
18
|
+
2. **Points de Vérification**
|
|
19
|
+
- Structure orientée fonctionnalités (feature-based)
|
|
20
|
+
- Hiérarchie des composants
|
|
21
|
+
- Gestion d'état
|
|
22
|
+
- Séparation de la couche API
|
|
23
|
+
- Définitions de types
|
|
24
|
+
|
|
25
|
+
3. **Rapport Généré**
|
|
26
|
+
- Violations architecturales
|
|
27
|
+
- Recommandations
|
|
28
|
+
- Opportunités de refactoring
|
|
29
|
+
- Score de conformité
|
|
11
30
|
|
|
12
31
|
## Mode Plan
|
|
13
32
|
|
|
14
33
|
> Le mode plan est activé automatiquement lorsque le périmètre couvre plusieurs modules ou nécessite une investigation transversale.
|
|
15
34
|
|
|
16
|
-
##
|
|
35
|
+
## Architecture Attendue
|
|
36
|
+
|
|
37
|
+
### Structure des Dossiers
|
|
38
|
+
|
|
39
|
+
```
|
|
40
|
+
src/
|
|
41
|
+
├── app/ # Configuration de l'application
|
|
42
|
+
│ ├── App.tsx
|
|
43
|
+
│ ├── routes.tsx
|
|
44
|
+
│ └── providers.tsx
|
|
45
|
+
│
|
|
46
|
+
├── features/ # Fonctionnalités (logique métier)
|
|
47
|
+
│ └── users/
|
|
48
|
+
│ ├── components/ # Composants spécifiques à la feature
|
|
49
|
+
│ ├── hooks/ # Hooks spécifiques à la feature
|
|
50
|
+
│ ├── services/ # Appels API
|
|
51
|
+
│ ├── stores/ # Gestion d'état
|
|
52
|
+
│ ├── types/ # Types TypeScript
|
|
53
|
+
│ └── utils/ # Fonctions utilitaires
|
|
54
|
+
│
|
|
55
|
+
├── components/ # Composants partagés
|
|
56
|
+
│ ├── ui/ # Primitives UI (Button, Input)
|
|
57
|
+
│ ├── layout/ # Composants de mise en page
|
|
58
|
+
│ └── common/ # Composants communs
|
|
59
|
+
│
|
|
60
|
+
├── hooks/ # Hooks partagés
|
|
61
|
+
├── services/ # Services partagés
|
|
62
|
+
├── stores/ # État global
|
|
63
|
+
├── types/ # Types globaux
|
|
64
|
+
├── utils/ # Fonctions utilitaires
|
|
65
|
+
├── constants/ # Constantes
|
|
66
|
+
└── config/ # Configuration
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Ce qu'il faut Vérifier
|
|
70
|
+
|
|
71
|
+
### 1. Organisation des Composants
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
// ❌ Mauvais - Tout dans un seul fichier
|
|
75
|
+
src/components/UserList.tsx (1000 lignes)
|
|
76
|
+
|
|
77
|
+
// ✅ Bon - Organisation appropriée
|
|
78
|
+
src/features/users/
|
|
79
|
+
├── components/
|
|
80
|
+
│ ├── UserList/
|
|
81
|
+
│ │ ├── UserList.tsx
|
|
82
|
+
│ │ ├── UserList.test.tsx
|
|
83
|
+
│ │ ├── UserListItem.tsx
|
|
84
|
+
│ │ └── index.ts
|
|
85
|
+
│ └── UserForm/
|
|
86
|
+
│ ├── UserForm.tsx
|
|
87
|
+
│ └── UserForm.test.tsx
|
|
88
|
+
├── hooks/
|
|
89
|
+
│ └── useUsers.ts
|
|
90
|
+
└── services/
|
|
91
|
+
└── user.service.ts
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### 2. Séparation des Responsabilités
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
// ❌ Mauvais - Responsabilités mélangées
|
|
98
|
+
export const UserList: FC = () => {
|
|
99
|
+
const [users, setUsers] = useState([]);
|
|
100
|
+
|
|
101
|
+
useEffect(() => {
|
|
102
|
+
fetch('/api/users')
|
|
103
|
+
.then(res => res.json())
|
|
104
|
+
.then(setUsers);
|
|
105
|
+
}, []);
|
|
106
|
+
|
|
107
|
+
return (
|
|
108
|
+
<div>
|
|
109
|
+
{users.map(user => (
|
|
110
|
+
<div key={user.id}>
|
|
111
|
+
<h3>{user.name}</h3>
|
|
112
|
+
<p>{user.email}</p>
|
|
113
|
+
</div>
|
|
114
|
+
))}
|
|
115
|
+
</div>
|
|
116
|
+
);
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
// ✅ Bon - Responsabilités séparées
|
|
120
|
+
// hooks/useUsers.ts
|
|
121
|
+
export const useUsers = () => {
|
|
122
|
+
return useQuery({
|
|
123
|
+
queryKey: ['users'],
|
|
124
|
+
queryFn: () => userService.getAll()
|
|
125
|
+
});
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
// services/user.service.ts
|
|
129
|
+
export const userService = {
|
|
130
|
+
getAll: () => apiClient.get<User[]>('/users')
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
// components/UserList.tsx
|
|
134
|
+
export const UserList: FC = () => {
|
|
135
|
+
const { data: users, isLoading } = useUsers();
|
|
136
|
+
|
|
137
|
+
if (isLoading) return <Spinner />;
|
|
138
|
+
|
|
139
|
+
return (
|
|
140
|
+
<ul>
|
|
141
|
+
{users?.map(user => (
|
|
142
|
+
<UserListItem key={user.id} user={user} />
|
|
143
|
+
))}
|
|
144
|
+
</ul>
|
|
145
|
+
);
|
|
146
|
+
};
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### 3. Direction des Dépendances
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
// ✅ Bon - Les dépendances vont vers l'intérieur
|
|
153
|
+
features/users/
|
|
154
|
+
└── components/ → Peut utiliser hooks/
|
|
155
|
+
└── hooks/ → Peut utiliser services/
|
|
156
|
+
└── services/ → Peut utiliser utils/
|
|
157
|
+
|
|
158
|
+
// ❌ Mauvais - Dépendances circulaires
|
|
159
|
+
services/user.service.ts importe depuis components/
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### 4. Types de Composants
|
|
163
|
+
|
|
164
|
+
```typescript
|
|
165
|
+
// Composants de Présentation (UI uniquement)
|
|
166
|
+
export const Button: FC<ButtonProps> = ({ children, ...props }) => {
|
|
167
|
+
return <button {...props}>{children}</button>;
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
// Composants Conteneurs (logique)
|
|
171
|
+
export const UserListContainer: FC = () => {
|
|
172
|
+
const { data: users } = useUsers();
|
|
173
|
+
const deleteUser = useDeleteUser();
|
|
174
|
+
|
|
175
|
+
return <UserListPresenter users={users} onDelete={deleteUser} />;
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
// Composants de Page (routage)
|
|
179
|
+
export const UsersPage: FC = () => {
|
|
180
|
+
return (
|
|
181
|
+
<MainLayout>
|
|
182
|
+
<PageHeader title="Users" />
|
|
183
|
+
<UserListContainer />
|
|
184
|
+
</MainLayout>
|
|
185
|
+
);
|
|
186
|
+
};
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### 5. Gestion d'État
|
|
190
|
+
|
|
191
|
+
```typescript
|
|
192
|
+
// ❌ Mauvais - État dupliqué en plusieurs endroits
|
|
193
|
+
const [users, setUsers] = useState([]);
|
|
194
|
+
// Mêmes données dans 5 composants différents
|
|
195
|
+
|
|
196
|
+
// ✅ Bon - État centralisé
|
|
197
|
+
// stores/userStore.ts
|
|
198
|
+
export const useUserStore = create<UserStore>((set) => ({
|
|
199
|
+
users: [],
|
|
200
|
+
setUsers: (users) => set({ users })
|
|
201
|
+
}));
|
|
202
|
+
|
|
203
|
+
// Ou React Query pour l'état serveur
|
|
204
|
+
export const useUsers = () => {
|
|
205
|
+
return useQuery({
|
|
206
|
+
queryKey: ['users'],
|
|
207
|
+
queryFn: () => userService.getAll()
|
|
208
|
+
});
|
|
209
|
+
};
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Patterns Architecturaux
|
|
213
|
+
|
|
214
|
+
### 1. Structure Orientée Fonctionnalités
|
|
215
|
+
|
|
216
|
+
```
|
|
217
|
+
src/features/
|
|
218
|
+
├── auth/
|
|
219
|
+
│ ├── components/
|
|
220
|
+
│ ├── hooks/
|
|
221
|
+
│ ├── services/
|
|
222
|
+
│ └── stores/
|
|
223
|
+
├── users/
|
|
224
|
+
└── products/
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### 2. Couches de Clean Architecture
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
Couche Présentation (Composants)
|
|
231
|
+
↓
|
|
232
|
+
Couche Logique Métier (Hooks, Services)
|
|
233
|
+
↓
|
|
234
|
+
Couche Données (API, Store)
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### 3. Atomic Design
|
|
238
|
+
|
|
239
|
+
```
|
|
240
|
+
src/components/
|
|
241
|
+
├── atoms/ # Button, Input, Label
|
|
242
|
+
├── molecules/ # FormField, SearchBar
|
|
243
|
+
├── organisms/ # UserForm, Header
|
|
244
|
+
├── templates/ # PageLayout, DashboardLayout
|
|
245
|
+
└── pages/ # HomePage, UsersPage
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
## Règles de Validation
|
|
249
|
+
|
|
250
|
+
### Règle 1 : Pas de Logique Métier dans les Composants
|
|
251
|
+
|
|
252
|
+
```typescript
|
|
253
|
+
// ❌ Mauvais
|
|
254
|
+
export const UserForm: FC = () => {
|
|
255
|
+
const [email, setEmail] = useState('');
|
|
17
256
|
|
|
18
|
-
|
|
257
|
+
const validate = () => {
|
|
258
|
+
return email.includes('@') && email.length > 5;
|
|
259
|
+
};
|
|
19
260
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
- Lire les règles architecturales depuis `/home/fmetivier/Documents/Company/TheBeardedCTO/Tools/Claude/Dev/React/rules/02-architecture.md`
|
|
23
|
-
- Comprendre la structure attendue (Feature-based, Atomic Design)
|
|
261
|
+
// ... logique de validation complexe
|
|
262
|
+
};
|
|
24
263
|
|
|
25
|
-
|
|
264
|
+
// ✅ Bon
|
|
265
|
+
export const UserForm: FC = () => {
|
|
266
|
+
const form = useForm({
|
|
267
|
+
resolver: zodResolver(userSchema)
|
|
268
|
+
});
|
|
26
269
|
|
|
27
|
-
|
|
270
|
+
// Validation dans le schéma, logique dans le hook
|
|
271
|
+
};
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### Règle 2 : Appels API via les Services
|
|
28
275
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
276
|
+
```typescript
|
|
277
|
+
// ❌ Mauvais - fetch direct dans le composant
|
|
278
|
+
const response = await fetch('/api/users');
|
|
279
|
+
|
|
280
|
+
// ✅ Bon - Via le service
|
|
281
|
+
const users = await userService.getAll();
|
|
282
|
+
```
|
|
34
283
|
|
|
35
|
-
|
|
36
|
-
- [ ] Hiérarchie atoms/molecules/organisms/templates/pages
|
|
37
|
-
- [ ] Composants atomiques réutilisables
|
|
38
|
-
- [ ] Composition progressive respectée
|
|
39
|
-
- [ ] Pas de logique métier dans les atoms
|
|
284
|
+
### Règle 3 : Types Centralisés
|
|
40
285
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
286
|
+
```typescript
|
|
287
|
+
// ✅ Bonne structure
|
|
288
|
+
src/features/users/types/
|
|
289
|
+
├── user.types.ts
|
|
290
|
+
├── dto.types.ts
|
|
291
|
+
└── index.ts
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
## Vérifications Automatisées
|
|
295
|
+
|
|
296
|
+
### Règles ESLint pour l'Architecture
|
|
297
|
+
|
|
298
|
+
```json
|
|
299
|
+
// .eslintrc.json
|
|
300
|
+
{
|
|
301
|
+
"rules": {
|
|
302
|
+
"no-restricted-imports": [
|
|
303
|
+
"error",
|
|
304
|
+
{
|
|
305
|
+
"patterns": [
|
|
306
|
+
{
|
|
307
|
+
"group": ["../**/features/*"],
|
|
308
|
+
"message": "Les features ne doivent pas importer d'autres features"
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
"group": ["**/components/**/services/*"],
|
|
312
|
+
"message": "Les composants ne doivent pas importer les services directement"
|
|
313
|
+
}
|
|
314
|
+
]
|
|
315
|
+
}
|
|
316
|
+
]
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
```
|
|
46
320
|
|
|
47
|
-
|
|
48
|
-
- [ ] State management centralisé (Context/Zustand/Redux)
|
|
49
|
-
- [ ] Pas de prop drilling excessif (>3 niveaux)
|
|
50
|
-
- [ ] State local vs global clairement séparé
|
|
51
|
-
- [ ] Hooks personnalisés pour la logique réutilisable
|
|
321
|
+
### Script Personnalisé
|
|
52
322
|
|
|
53
|
-
|
|
323
|
+
```typescript
|
|
324
|
+
// scripts/check-architecture.ts
|
|
325
|
+
import { glob } from 'glob';
|
|
326
|
+
import { readFile } from 'fs/promises';
|
|
54
327
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
- Vérifier l'encapsulation des API
|
|
59
|
-
- Mesurer le couplage inter-features
|
|
328
|
+
const checkImports = async () => {
|
|
329
|
+
const files = await glob('src/**/*.{ts,tsx}');
|
|
330
|
+
const violations = [];
|
|
60
331
|
|
|
61
|
-
|
|
332
|
+
for (const file of files) {
|
|
333
|
+
const content = await readFile(file, 'utf-8');
|
|
62
334
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
335
|
+
// Vérifier les violations
|
|
336
|
+
if (file.includes('/components/') && content.includes('fetch(')) {
|
|
337
|
+
violations.push({
|
|
338
|
+
file,
|
|
339
|
+
rule: 'Pas d\'appels API directs dans les composants',
|
|
340
|
+
line: content.split('\n').findIndex(l => l.includes('fetch('))
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
}
|
|
68
344
|
|
|
69
|
-
|
|
345
|
+
return violations;
|
|
346
|
+
};
|
|
347
|
+
```
|
|
70
348
|
|
|
71
|
-
|
|
349
|
+
## Rapport de Conformité
|
|
72
350
|
|
|
73
351
|
```
|
|
74
352
|
═══════════════════════════════════════════════════
|
|
@@ -125,10 +403,49 @@ Générer un rapport structuré :
|
|
|
125
403
|
• rules/03-coding-standards.md - Conventions de code
|
|
126
404
|
```
|
|
127
405
|
|
|
128
|
-
|
|
406
|
+
## Bonnes Pratiques
|
|
407
|
+
|
|
408
|
+
1. **Isolation des features** : Chaque feature est autonome
|
|
409
|
+
2. **Frontières claires** : Couches présentation, logique, données
|
|
410
|
+
3. **Injection de dépendances** : Services via hooks/context
|
|
411
|
+
4. **Sécurité des types** : TypeScript partout
|
|
412
|
+
5. **Nommage cohérent** : Respecter les conventions
|
|
413
|
+
6. **Responsabilité unique** : Un composant, une tâche
|
|
414
|
+
7. **Composition plutôt qu'héritage** : Utiliser la composition
|
|
415
|
+
8. **Documentation** : Documenter les décisions architecturales
|
|
416
|
+
|
|
417
|
+
## Violations Courantes
|
|
418
|
+
|
|
419
|
+
### Violation 1 : Composants Dieux
|
|
420
|
+
|
|
421
|
+
**Problème** : Le composant fait trop de choses
|
|
422
|
+
**Solution** : Décomposer en composants plus petits
|
|
423
|
+
|
|
424
|
+
### Violation 2 : Dépendances Circulaires
|
|
425
|
+
|
|
426
|
+
**Problème** : A importe B, B importe A
|
|
427
|
+
**Solution** : Extraire le code commun ou repenser la structure
|
|
428
|
+
|
|
429
|
+
### Violation 3 : Prop Drilling
|
|
430
|
+
|
|
431
|
+
**Problème** : Passage de props à travers de nombreux niveaux
|
|
432
|
+
**Solution** : Utiliser le Context ou la gestion d'état
|
|
433
|
+
|
|
434
|
+
### Violation 4 : Responsabilités Mélangées
|
|
435
|
+
|
|
436
|
+
**Problème** : UI et logique métier mélangées
|
|
437
|
+
**Solution** : Séparer en composant présentateur et conteneur
|
|
438
|
+
|
|
439
|
+
## Outils
|
|
440
|
+
|
|
441
|
+
- ESLint avec règles personnalisées
|
|
442
|
+
- Dependency cruiser
|
|
443
|
+
- Madge (graphe de dépendances)
|
|
444
|
+
- SonarQube
|
|
445
|
+
- Scripts personnalisés
|
|
446
|
+
|
|
447
|
+
## Ressources
|
|
129
448
|
|
|
130
|
-
|
|
131
|
-
-
|
|
132
|
-
-
|
|
133
|
-
- Fournir un exemple de code si pertinent
|
|
134
|
-
- Indiquer le niveau d'effort (Low/Medium/High)
|
|
449
|
+
- [React Architecture Best Practices](https://react.dev/learn/thinking-in-react)
|
|
450
|
+
- [Feature-Sliced Design](https://feature-sliced.design/)
|
|
451
|
+
- [Clean Architecture](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html)
|