← Назад к вопросам
Что такое чистая архитектура?
2.0 Middle🔥 241 комментариев
#Архитектура Flutter#ООП и паттерны
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Чистая архитектура в Flutter
Чистая архитектура (Clean Architecture) — это подход к организации кода, разработанный Robert Martin. Цель: сделать код независимым от фреймворков, баз данных, UI и легко тестируемым.
Основные принципы
Все слои организованы как слои луковицы, где каждый слой зависит только от более внутренних:
┌─────────────────────────────────────────┐
│ Presentation (UI, State Management) │
├─────────────────────────────────────────┤
│ Application (Use Cases, Controllers) │
├─────────────────────────────────────────┤
│ Domain (Entities, Repository interfaces)│
├─────────────────────────────────────────┤
│ Infrastructure (API, Database) │
└─────────────────────────────────────────┘
Слои архитектуры
Domain Layer — самый независимый слой, содержит бизнес-логику:
// Entity
class User {
final String id;
final String name;
final String email;
User({required this.id, required this.name, required this.email});
}
// Repository Interface
abstract class UserRepository {
Future<User> getUserById(String id);
Future<void> saveUser(User user);
}
Application Layer — use cases и controllers. Каждый use case решает одну задачу:
class GetUserUseCase {
final UserRepository repository;
GetUserUseCase(this.repository);
Future<User> call(String userId) async {
return await repository.getUserById(userId);
}
}
Infrastructure Layer — реализация репозиториев, API, база данных:
class UserRepositoryImpl implements UserRepository {
final ApiClient apiClient;
UserRepositoryImpl(this.apiClient);
@override
Future<User> getUserById(String id) async {
final response = await apiClient.get(/users/);
return User.fromJson(response);
}
@override
Future<void> saveUser(User user) async {
await apiClient.post(/users, user.toJson());
}
}
Presentation Layer — UI, виджеты, state management:
class UserScreen extends StatelessWidget {
final GetUserUseCase useCase;
const UserScreen({required this.useCase});
@override
Widget build(BuildContext context) {
return FutureBuilder<User>(
future: useCase(user-123),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data!.name);
}
return const CircularProgressIndicator();
},
);
}
}
Преимущества
- Тестируемость — легко писать unit-тесты, так как слои независимы
- Масштабируемость — код растёт упорядоченно
- Переиспользование — бизнес-логика не привязана к UI
- Простая смена деталей — меняешь API или БД без изменения бизнес-логики
Чистая архитектура требует больше кода, но окупается на крупных проектах.