← Назад к вопросам

По каким правилам в Dart именуются классы?

1.0 Junior🔥 131 комментариев
#Dart#ООП и паттерны

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Правила именования классов в Dart

Правильное именование — это важная часть чистого кода. Dart следует определённым соглашениям для именования классов.

1. Основное правило: UpperCamelCase (PascalCase)

Классы должны начинаться с БОЛЬШОЙ буквы и использовать camelCase:

// ✅ Правильно
class User {}
class UserProfile {}
class ApiClient {}
class HttpRequest {}
class FileManager {}

// ❌ Неправильно
class user {}          // Маленькая буква
class User_Profile {}  // Underscore (это для константных переменных)
class userProfile {}   // Маленькая буква в начале
class USER {}          // Все заглавные (это для констант)
class u {}             // Слишком короткое имя

2. Имена должны быть описательными

// ✅ Правильно: понятные имена
class UserRepository {}
class PaymentService {}
class DatabaseConnection {}
class ImageProcessor {}
class NotificationManager {}

// ❌ Неправильно: слишком короткие или неинформативные
class Usr {}
class Svc {}
class Proc {}
class Utils {}  // Слишком общее
class MyClass {}  // Не описывает назначение

3. Существительные для имён классов

Классы обычно именуют существительными, не глаголами:

// ✅ Правильно: существительные
class Button {}       // Widget, можно нажать
class User {}         // Сущность, которую мы моделируем
class Logger {}       // Сервис логирования
class Timer {}        // Таймер
class Request {}      // Объект запроса
class Response {}     // Объект ответа

// ❌ Неправильно: глаголы в названии
class DoSomething {}       // Глагол + объект
class ProcessData {}        // Хотя Process может быть сущностью...
class HandleClick {}        // Глагол + объект
class FetchUser {}          // Глагол

4. Абстрактные классы

// ✅ Обычно используется префикс Abstract
abstract class Animal {}
abstract class Repository {}
abstract class Service {}

// Или просто как обычное имя
abstract class Database {}

// ❌ Не используйте префиксы I для интерфейсов (как в Java)
// ❌ interface IUserRepository {}  // В Dart это не требуется

5. Mixins

// ✅ Правильно: часто используют суффиксы
mixin Loggable {}          // Может логировать
mixin Comparable {}        // Может сравниваться
mixin Serializable {}      // Может сериализоваться
mixin ChangeNotifier {}    // Может уведомлять об изменениях

// Или обычные имена
mixin AudioMixin {}
mixin CacheMixin {}
mixin ValidationMixin {}

6. Перечисления (Enum)

// ✅ Правильно
enum Status { pending, active, completed }
enum Color { red, green, blue }
enum UserRole { admin, moderator, user }
enum HttpMethod { get, post, put, delete }

// Значения enum пишутся с маленькой буквы
enum Season {
  spring,      // ✅
  Summer,      // ❌ Неправильно: маленькая буква для значений
  AUTUMN,      // ❌ Неправильно: все заглавные
  winter,      // ✅
}

7. Exception классы

// ✅ Правильно: суффикс Exception
class ValidationException implements Exception {}
class NetworkException implements Exception {}
class DatabaseException implements Exception {}
class TimeoutException implements Exception {}

// ❌ Неправильно
class ValidationError {}    // Лучше Exception
class Error_Validation {}   // Underscore

8. Widget классы в Flutter

// ✅ Правильно
class UserProfile extends StatefulWidget {}
class LoadingIndicator extends StatelessWidget {}
class CustomAppBar extends AppBar {}
class ProfileCard extends StatelessWidget {}
class ErrorMessage extends StatelessWidget {}

// ❌ Неправильно
class user_profile extends StatefulWidget {}    // Lowercase и underscore
class LoadingIndicatorWidget {}                 // Лишнее слово Widget
class MyCustomWidget {}                         // My + слишком неинформативно
class WButtonWidget {}                          // W + Widget + Widget

9. Вложенные классы

// ✅ Правильно
class User {
  class Preferences {}
  class Settings {}
}

class ApiClient {
  class Request {}
  class Response {}
}

// ❌ Неправильно
class User {
  class UserPreferences {}    // Повторение User
  class user_settings {}      // Маленькая буква и underscore
}

10. Типовые назначения класса в имени

// ✅ Service классы
class UserService {}        // Бизнес-логика
class PaymentService {}     // Работа с платежами
class NotificationService {}

// ✅ Repository классы
class UserRepository {}     // Доступ к данным
class PostRepository {}
class CommentRepository {}

// ✅ Provider классы (для state management)
class UserProvider {}       // Riverpod/Provider
class ThemeProvider {}
class LocalizationProvider {}

// ✅ Model/Entity классы
class User {}
class Product {}
class Order {}

// ✅ DTO (Data Transfer Object) классы
class UserDTO {}
class CreateUserRequest {}
class UserResponse {}

// ✅ Controller классы
class UserController {}
class AuthController {}

// ✅ Utility классы (если нужны)
class DateUtils {}          // Утилиты для дат
class StringUtils {}        // Утилиты для строк
class ValidationUtils {}

11. Практические примеры правильного именования

// ✅ Хорошо структурированное приложение

// Models
class User {}
class Post {}
class Comment {}
class Tag {}

// Services
class UserService {
  Future<User> getUser(int id) async {}
  Future<void> updateUser(User user) async {}
}

class PostService {}
class NotificationService {}

// Repositories
class UserRepository {}
class PostRepository {}

// Providers (State Management)
class UserProvider {}
class ThemeProvider {}

// Widgets
class UserProfile extends StatefulWidget {}
class PostCard extends StatelessWidget {}
class LoadingOverlay extends StatelessWidget {}

// Exceptions
class UserNotFoundException implements Exception {}
class NetworkTimeoutException implements Exception {}
class ValidationException implements Exception {}

// Enums
enum UserRole { admin, moderator, user }
enum PostStatus { draft, published, archived }

// Mixins
mixin Loggable {}
mixin Cacheable {}
mixin Validatable {}

12. Соглашения Dart Code Style (по официальной документации)

✅ DO: используйте UpperCamelCase для названий классов
class MyClass {}

✅ DO: используйте маленькие буквы для переменных и методов
var myVariable = 10;
void myMethod() {}

✅ DO: используйте UPPER_SNAKE_CASE для констант
const int MAX_SIZE = 100;
const String DEFAULT_NAME = 'Guest';

✅ DO: помещайте открывающую скобку { на той же строке
class MyClass {    // ✅
class MyClass
{               // ❌

✅ DO: используйте 2 пробела для отступа (не tabs)
class MyClass {
  void method() {
    print('hello');
  }
}

13. Чек-лист для проверки имён классов

  • Начинается с БОЛЬШОЙ буквы (UpperCamelCase)
  • Не содержит underscore (_)
  • Описательное имя (не одна буква, не слишком короткое)
  • Это существительное, не глагол
  • Соответствует роли класса (Service, Repository, Provider, Widget и т.д.)
  • На английском языке
  • Понятно для других разработчиков
  • Не дублирует уже существующие имена

Итоговое правило

Используй UpperCamelCase, будь описательным и следуй намерениям класса через его имя.

Хорошее имя класса — это первая документация для других разработчиков.