@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,59 +1,394 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: Verificação de Conformidade Arquitetural
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
#
|
|
5
|
+
# Verificação de Conformidade Arquitetural
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Verifique se o projeto segue os padrões arquiteturais estabelecidos e as melhores práticas.
|
|
8
8
|
|
|
9
9
|
## O Que Este Comando Faz
|
|
10
10
|
|
|
11
|
-
1. **
|
|
12
|
-
- Verificar estrutura de pastas
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
- Verificar
|
|
16
|
-
-
|
|
11
|
+
1. **Análise de Arquitetura**
|
|
12
|
+
- Verificar a estrutura de pastas
|
|
13
|
+
- Validar a separação de responsabilidades
|
|
14
|
+
- Confirmar a organização dos componentes
|
|
15
|
+
- Verificar as direções de dependência
|
|
16
|
+
- Validar os padrões de design utilizados
|
|
17
17
|
|
|
18
|
-
2. **Pontos de
|
|
19
|
-
- Estrutura baseada em
|
|
18
|
+
2. **Pontos de Verificação**
|
|
19
|
+
- Estrutura baseada em features
|
|
20
20
|
- Hierarquia de componentes
|
|
21
21
|
- Gerenciamento de estado
|
|
22
|
-
-
|
|
23
|
-
-
|
|
22
|
+
- Separação da camada de API
|
|
23
|
+
- Definições de tipos
|
|
24
24
|
|
|
25
|
-
3. **
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
- Oportunidades de
|
|
29
|
-
-
|
|
25
|
+
3. **Relatório Gerado**
|
|
26
|
+
- Violações arquiteturais
|
|
27
|
+
- Recomendações
|
|
28
|
+
- Oportunidades de refatoração
|
|
29
|
+
- Pontuação de conformidade
|
|
30
30
|
|
|
31
31
|
## Modo Plano
|
|
32
32
|
|
|
33
|
-
> O modo plano é ativado automaticamente quando o escopo abrange vários módulos ou
|
|
33
|
+
> O modo plano é ativado automaticamente quando o escopo abrange vários módulos ou exige investigação transversal.
|
|
34
34
|
|
|
35
|
-
##
|
|
35
|
+
## Arquitetura Esperada
|
|
36
|
+
|
|
37
|
+
### Estrutura de Pastas
|
|
36
38
|
|
|
37
39
|
```
|
|
38
40
|
src/
|
|
39
|
-
├── app/ #
|
|
40
|
-
├──
|
|
41
|
+
├── app/ # Configuração da aplicação
|
|
42
|
+
│ ├── App.tsx
|
|
43
|
+
│ ├── routes.tsx
|
|
44
|
+
│ └── providers.tsx
|
|
45
|
+
│
|
|
46
|
+
├── features/ # Features (lógica de negócio)
|
|
47
|
+
│ └── users/
|
|
48
|
+
│ ├── components/ # Componentes específicos da feature
|
|
49
|
+
│ ├── hooks/ # Hooks específicos da feature
|
|
50
|
+
│ ├── services/ # Chamadas de API
|
|
51
|
+
│ ├── stores/ # Gerenciamento de estado
|
|
52
|
+
│ ├── types/ # Tipos TypeScript
|
|
53
|
+
│ └── utils/ # Funções utilitárias
|
|
54
|
+
│
|
|
41
55
|
├── components/ # Componentes compartilhados
|
|
56
|
+
│ ├── ui/ # Primitivas de UI (Button, Input)
|
|
57
|
+
│ ├── layout/ # Componentes de layout
|
|
58
|
+
│ └── common/ # Componentes comuns
|
|
59
|
+
│
|
|
42
60
|
├── hooks/ # Hooks compartilhados
|
|
43
|
-
├── services/ #
|
|
61
|
+
├── services/ # Serviços compartilhados
|
|
44
62
|
├── stores/ # Estado global
|
|
45
63
|
├── types/ # Tipos globais
|
|
46
|
-
├── utils/ #
|
|
47
|
-
|
|
64
|
+
├── utils/ # Funções utilitárias
|
|
65
|
+
├── constants/ # Constantes
|
|
66
|
+
└── config/ # Configuração
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## O Que Verificar
|
|
70
|
+
|
|
71
|
+
### 1. Organização de Componentes
|
|
72
|
+
|
|
73
|
+
```typescript
|
|
74
|
+
// ❌ Ruim - Tudo em um único arquivo
|
|
75
|
+
src/components/UserList.tsx (1000 linhas)
|
|
76
|
+
|
|
77
|
+
// ✅ Bom - Organização adequada
|
|
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. Separação de Responsabilidades
|
|
95
|
+
|
|
96
|
+
```typescript
|
|
97
|
+
// ❌ Ruim - Responsabilidades misturadas
|
|
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
|
+
// ✅ Bom - Responsabilidades separadas
|
|
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. Direção das Dependências
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
// ✅ Bom - As dependências fluem para dentro
|
|
153
|
+
features/users/
|
|
154
|
+
└── components/ → Pode usar hooks/
|
|
155
|
+
└── hooks/ → Pode usar services/
|
|
156
|
+
└── services/ → Pode usar utils/
|
|
157
|
+
|
|
158
|
+
// ❌ Ruim - Dependências circulares
|
|
159
|
+
services/user.service.ts importa de components/
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### 4. Tipos de Componentes
|
|
163
|
+
|
|
164
|
+
```typescript
|
|
165
|
+
// Componentes de Apresentação (apenas UI)
|
|
166
|
+
export const Button: FC<ButtonProps> = ({ children, ...props }) => {
|
|
167
|
+
return <button {...props}>{children}</button>;
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
// Componentes Container (lógica)
|
|
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
|
+
// Componentes de Página (roteamento)
|
|
179
|
+
export const UsersPage: FC = () => {
|
|
180
|
+
return (
|
|
181
|
+
<MainLayout>
|
|
182
|
+
<PageHeader title="Usuários" />
|
|
183
|
+
<UserListContainer />
|
|
184
|
+
</MainLayout>
|
|
185
|
+
);
|
|
186
|
+
};
|
|
48
187
|
```
|
|
49
188
|
|
|
50
|
-
|
|
189
|
+
### 5. Gerenciamento de Estado
|
|
190
|
+
|
|
191
|
+
```typescript
|
|
192
|
+
// ❌ Ruim - Estado em vários lugares
|
|
193
|
+
const [users, setUsers] = useState([]);
|
|
194
|
+
// Mesmos dados em 5 componentes diferentes
|
|
195
|
+
|
|
196
|
+
// ✅ Bom - Estado centralizado
|
|
197
|
+
// stores/userStore.ts
|
|
198
|
+
export const useUserStore = create<UserStore>((set) => ({
|
|
199
|
+
users: [],
|
|
200
|
+
setUsers: (users) => set({ users })
|
|
201
|
+
}));
|
|
202
|
+
|
|
203
|
+
// Ou React Query para estado do servidor
|
|
204
|
+
export const useUsers = () => {
|
|
205
|
+
return useQuery({
|
|
206
|
+
queryKey: ['users'],
|
|
207
|
+
queryFn: () => userService.getAll()
|
|
208
|
+
});
|
|
209
|
+
};
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Padrões Arquiteturais
|
|
213
|
+
|
|
214
|
+
### 1. Estrutura Baseada em Features
|
|
215
|
+
|
|
216
|
+
```
|
|
217
|
+
src/features/
|
|
218
|
+
├── auth/
|
|
219
|
+
│ ├── components/
|
|
220
|
+
│ ├── hooks/
|
|
221
|
+
│ ├── services/
|
|
222
|
+
│ └── stores/
|
|
223
|
+
├── users/
|
|
224
|
+
└── products/
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### 2. Camadas de Clean Architecture
|
|
228
|
+
|
|
229
|
+
```
|
|
230
|
+
Camada de Apresentação (Componentes)
|
|
231
|
+
↓
|
|
232
|
+
Camada de Lógica de Negócio (Hooks, Services)
|
|
233
|
+
↓
|
|
234
|
+
Camada de Dados (API, Store)
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### 3. Design Atômico
|
|
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
|
+
## Regras de Validação
|
|
249
|
+
|
|
250
|
+
### Regra 1: Sem Lógica de Negócio em Componentes
|
|
251
|
+
|
|
252
|
+
```typescript
|
|
253
|
+
// ❌ Ruim
|
|
254
|
+
export const UserForm: FC = () => {
|
|
255
|
+
const [email, setEmail] = useState('');
|
|
256
|
+
|
|
257
|
+
const validate = () => {
|
|
258
|
+
return email.includes('@') && email.length > 5;
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
// ... lógica de validação complexa
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
// ✅ Bom
|
|
265
|
+
export const UserForm: FC = () => {
|
|
266
|
+
const form = useForm({
|
|
267
|
+
resolver: zodResolver(userSchema)
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
// Validação no schema, lógica no hook
|
|
271
|
+
};
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
### Regra 2: Chamadas de API Através de Serviços
|
|
275
|
+
|
|
276
|
+
```typescript
|
|
277
|
+
// ❌ Ruim - fetch direto no componente
|
|
278
|
+
const response = await fetch('/api/users');
|
|
279
|
+
|
|
280
|
+
// ✅ Bom - Através do serviço
|
|
281
|
+
const users = await userService.getAll();
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
### Regra 3: Tipos São Centralizados
|
|
285
|
+
|
|
286
|
+
```typescript
|
|
287
|
+
// ✅ Boa estrutura
|
|
288
|
+
src/features/users/types/
|
|
289
|
+
├── user.types.ts
|
|
290
|
+
├── dto.types.ts
|
|
291
|
+
└── index.ts
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
## Verificações Automatizadas
|
|
295
|
+
|
|
296
|
+
### Regras ESLint para Arquitetura
|
|
297
|
+
|
|
298
|
+
```json
|
|
299
|
+
// .eslintrc.json
|
|
300
|
+
{
|
|
301
|
+
"rules": {
|
|
302
|
+
"no-restricted-imports": [
|
|
303
|
+
"error",
|
|
304
|
+
{
|
|
305
|
+
"patterns": [
|
|
306
|
+
{
|
|
307
|
+
"group": ["../**/features/*"],
|
|
308
|
+
"message": "Features não devem importar de outras features"
|
|
309
|
+
},
|
|
310
|
+
{
|
|
311
|
+
"group": ["**/components/**/services/*"],
|
|
312
|
+
"message": "Componentes não devem importar serviços diretamente"
|
|
313
|
+
}
|
|
314
|
+
]
|
|
315
|
+
}
|
|
316
|
+
]
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### Script Personalizado
|
|
322
|
+
|
|
323
|
+
```typescript
|
|
324
|
+
// scripts/check-architecture.ts
|
|
325
|
+
import { glob } from 'glob';
|
|
326
|
+
import { readFile } from 'fs/promises';
|
|
327
|
+
|
|
328
|
+
const checkImports = async () => {
|
|
329
|
+
const files = await glob('src/**/*.{ts,tsx}');
|
|
330
|
+
const violations = [];
|
|
331
|
+
|
|
332
|
+
for (const file of files) {
|
|
333
|
+
const content = await readFile(file, 'utf-8');
|
|
334
|
+
|
|
335
|
+
// Verificar violações
|
|
336
|
+
if (file.includes('/components/') && content.includes('fetch(')) {
|
|
337
|
+
violations.push({
|
|
338
|
+
file,
|
|
339
|
+
rule: 'Sem chamadas diretas de API em componentes',
|
|
340
|
+
line: content.split('\n').findIndex(l => l.includes('fetch('))
|
|
341
|
+
});
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
return violations;
|
|
346
|
+
};
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
## Melhores Práticas
|
|
350
|
+
|
|
351
|
+
1. **Isolamento de features**: Cada feature é autocontida
|
|
352
|
+
2. **Fronteiras claras**: Camadas de apresentação, lógica e dados
|
|
353
|
+
3. **Injeção de dependências**: Serviços através de hooks/context
|
|
354
|
+
4. **Segurança de tipos**: TypeScript em todo lugar
|
|
355
|
+
5. **Nomenclatura consistente**: Seguir as convenções
|
|
356
|
+
6. **Responsabilidade única**: Um componente, uma responsabilidade
|
|
357
|
+
7. **Composição sobre herança**: Usar composição
|
|
358
|
+
8. **Documentação**: Documentar as decisões arquiteturais
|
|
359
|
+
|
|
360
|
+
## Violações Comuns
|
|
361
|
+
|
|
362
|
+
### Violação 1: Componentes Deus
|
|
363
|
+
|
|
364
|
+
**Problema**: O componente faz coisas demais
|
|
365
|
+
**Solução**: Dividir em componentes menores
|
|
366
|
+
|
|
367
|
+
### Violação 2: Dependências Circulares
|
|
368
|
+
|
|
369
|
+
**Problema**: A importa B, B importa A
|
|
370
|
+
**Solução**: Extrair código comum ou repensar a estrutura
|
|
371
|
+
|
|
372
|
+
### Violação 3: Prop Drilling
|
|
373
|
+
|
|
374
|
+
**Problema**: Passar props por muitos níveis
|
|
375
|
+
**Solução**: Usar Context ou gerenciamento de estado
|
|
376
|
+
|
|
377
|
+
### Violação 4: Responsabilidades Misturadas
|
|
378
|
+
|
|
379
|
+
**Problema**: UI e lógica de negócio misturadas
|
|
380
|
+
**Solução**: Separar em apresentador (presenter) e container
|
|
381
|
+
|
|
382
|
+
## Ferramentas
|
|
383
|
+
|
|
384
|
+
- ESLint com regras personalizadas
|
|
385
|
+
- Dependency cruiser
|
|
386
|
+
- Madge (grafo de dependências)
|
|
387
|
+
- SonarQube
|
|
388
|
+
- Scripts personalizados
|
|
389
|
+
|
|
390
|
+
## Recursos
|
|
51
391
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
4. **Type safety**: TypeScript em todos os lugares
|
|
56
|
-
5. **Nomenclatura consistente**: Seguir convencoes
|
|
57
|
-
6. **Responsabilidade unica**: Um componente, uma tarefa
|
|
58
|
-
7. **Composicao sobre heranca**: Usar composicao
|
|
59
|
-
8. **Documentacao**: Documentar decisoes de arquitetura
|
|
392
|
+
- [Melhores Práticas de Arquitetura React](https://react.dev/learn/thinking-in-react)
|
|
393
|
+
- [Feature-Sliced Design](https://feature-sliced.design/)
|
|
394
|
+
- [Clean Architecture](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html)
|