mirror of
https://github.com/smmarty/friflex_flutter_starter.git
synced 2026-02-05 03:32:18 +00:00
docs(github, docs): Добавить пример документации (#9)
This commit is contained in:
124
tools/rfc/RFC-codestyle.md
Normal file
124
tools/rfc/RFC-codestyle.md
Normal file
@@ -0,0 +1,124 @@
|
||||
# Стиль кода
|
||||
|
||||
Мы придерживаемся рекомендаций, описанных в
|
||||
[Effective Dart](https://dart.dev/guides/language/effective-dart/design)
|
||||
|
||||
Перед каждым PR необходимо отформатировать код и проверить анализатор на отсутствие сообщений.
|
||||
|
||||
## Именование
|
||||
|
||||
### Интерфейсы
|
||||
Утверждены два вида объявления интерфейсов:
|
||||
1. Все интерфейсы в приложении должны начинаться с заглавной буквы "**I**".
|
||||
|
||||
Например: **IAuthRepository**, **IProfileRepository**, **IMainRunner** и т.д.
|
||||
|
||||
Таким образом, сразу видно, что работаешь с интерфейсом.
|
||||
Пример:
|
||||
```dart
|
||||
/// Интерфейс - **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 и так далее
|
||||
|
||||
Пример:
|
||||
```dart
|
||||
int fetchFirstElement(){}
|
||||
```
|
||||
Пример:
|
||||
```dart
|
||||
void updateFirstElement(){};
|
||||
```
|
||||
Название метода не должно содержать в себе And/Or
|
||||
и метод соответственно не должен выполнять подобную логику.
|
||||
|
||||
## Переменные и константы
|
||||
Константы именуются также lowerCamelCase.
|
||||
Пример:
|
||||
```dart
|
||||
const String carItem
|
||||
```
|
||||
или
|
||||
```dart
|
||||
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
|
||||
Reference in New Issue
Block a user