Files
friflex_flutter_starter/tools/rfc/RFC-codestyle.md

4.8 KiB
Raw Permalink Blame History

Стиль кода

Мы придерживаемся рекомендаций, описанных в Effective Dart

Перед каждым PR необходимо отформатировать код и проверить анализатор на отсутствие сообщений.

Именование

Интерфейсы

Утверждены два вида объявления интерфейсов:

  1. Все интерфейсы в приложении должны начинаться с заглавной буквы "I".

Например: IAuthRepository, IProfileRepository, IMainRunner и т.д.

Таким образом, сразу видно, что работаешь с интерфейсом. Пример:

/// Интерфейс -  **IUserRepository**
abstract interface class IUserRepository {}
/// Основная реализация (prod и stage окружения)
class UserRepository implements IUserRepository {}
/// Иная реализация (мок, локальное хранилище) должна содержать
/// постфикс функциональности: 
/// - Network - сетевое взаимодействие.
/// - Local - локальное хранилище.
/// - Mock - мок репозиторий.
class UserRepositoryLocal implements IUserRepository {}

Классы - Репозитории

Репозитории должны содержать в конце название источника данных (если используется мок или локальное хранилище).
Основная реализация, не должна содержать постфикса.

Например: Интерфейс - IAuthRepository
Основная реализация (prod и stage окружения) - AuthRepository
Мок (мок данные) - AuthRepositoryMock
Локальное хранилище (например бд или просто имитация данных) - AuthRepositoryLocal

Файлы

Используется snake_case. Название файла должно иметь следующую структуру: [раздел]_[тип].dart

Пример: user_details_screen.dart, shop_entity.dart

Классы

Название классов UpperCamelCase. Для создание приватных классов используем префикс _ . Название класса в конце должно содержать в себе тип.

Пример: UserEntity, AdultDialog

Методы

Название метода в начале должно содержать в себе действие(глагол):

  • fetch
  • put
  • update
  • delete и так далее

Пример:

int fetchFirstElement(){}

Пример:

void updateFirstElement(){};

Название метода не должно содержать в себе And/Or и метод соответственно не должен выполнять подобную логику.

Переменные и константы

Константы именуются также lowerCamelCase. Пример:

const String carItem 

или

final userName;

Виджеты

Виджеты именуются UpperCamelCase. В названии виджетов не должно содержаться слово widget.

Экраны

Экраны, используемые в роутинге, именуются с постфиксом Screen. Например, ShopListScreen.

Содержимое экрана

Виджеты, отображающие содержимое экрана, именуются с постфиксом View. Например, ShopListView.

Глобальные виджеты

Глобальные виджеты именуются с приставкой App. Например, AppButton.

Структура класса

Объявления элементов класса должны располагаться в следующем порядке:

  1. Constructors
    • constructors
    • named-constructors
    • factory-constructors
  2. Static
    • public-static-methods
    • private-static-methods
    • public-static-const-fields
    • private-static-const-fields
    • public-static-final-fields
    • private-static-final-fields
    • public-static-fields
    • private-static-fields
  3. Fields
    • public-final-fields
    • private-final-fields
    • public-fields
    • private-fields
  4. Getters/Setters
    • public-getters-setters
    • private-getters-setters
  5. Methods
    • overridden-methods
    • public-methods
    • protected-methods
    • private-methods