Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
p0dyakov committed Oct 26, 2023
1 parent bcabb0f commit dade600
Showing 1 changed file with 78 additions and 33 deletions.
111 changes: 78 additions & 33 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@
* [Generics](#generics)
* [Dart VM](#dart-vm)
* [Зоны](#-2)
* [Правила именования](#--3)
* [Типы ошибок](#--3)
* [Правила именования](#--4)
* [Never](#never)
* [Covariant](#covariant)
* [Аннотации](#-3)
Expand All @@ -38,8 +39,8 @@
* [Widget](#widget)
* [Element](#element)
* [RenderObject](#renderobject)
* [Виды виджетов](#--4)
* [Виды элементов](#--5)
* [Виды виджетов](#--5)
* [Виды элементов](#--6)
* [Жизненный цикл Element-а](#-element-)
* [GlobalKeys](#globalkeys)
* [LocalKeys](#localkeys)
Expand All @@ -48,16 +49,16 @@
* [CustomPaint](#custompaint)
* [WidgetsFlutterBinding](#widgetsflutterbinding)
* [Bindings](#bindings)
* [Каналы платформы](#--6)
* [Режимы сборки](#--7)
* [Каналы платформы](#--7)
* [Режимы сборки](#--8)
* [Package и Plugin](#package-plugin)
* [FFI Plugin](#ffi-plugin)
* [Этапы анимации](#--8)
* [Виды анимаций](#--9)
* [Этапы анимации](#--9)
* [Виды анимаций](#--10)
* [Что такое Tween](#-tween)
* [Tween анимации](#tween-)
* [Построение кадра](#--10)
* [Расчёт макета](#--11)
* [Построение кадра](#--11)
* [Расчёт макета](#--12)
* [BuildOwner](#buildowner)
* [PipelineOwner](#pipelineowner)
* [Garbage Collector](#garbage-collector)
Expand All @@ -74,19 +75,19 @@
* [Многопоточность в Dart и Flutter ](#-dart-flutter)
* [Isolate](#isolate)
* [Compute](#compute)
* [Проблемы многопоточности](#--12)
* [Проблемы многопоточности](#--13)
- [Архитектура](#-7)
* [Архитектура](#-8)
* [Чистая архитектура](#--13)
* [Управление состоянием](#--14)
* [Чистая архитектура](#--14)
* [Управление состоянием](#--15)
* [Dependency Injection ](#dependency-injection)
* [Архитектурные патерны ](#--15)
* [Способы осуществления навигации](#--16)
* [Базы данных](#--17)
* [Архитектурные патерны ](#--16)
* [Способы осуществления навигации](#--17)
* [Базы данных](#--18)
- [Тестирование](#-9)
* [Виды тестов](#--18)
* [Виды тестов](#--19)
* [TDD](#tdd)
- [Паттерны разработки](#--19)
- [Паттерны разработки](#--20)

<!-- TOC end -->

Expand Down Expand Up @@ -255,6 +256,50 @@

---
<!-- TOC --><a name="--3"></a>
### Типы ошибок
`Exception` - это общий класс для исключений, которые обычно возникают из-за ошибок в программе, и их можно обработать и восстановиться от них:
- DeferredLoadException
- FormatException
- IntegerDivisionByZeroException (помечен как устаревший)
- IOException
- FileSystemException
- PathNotFoundException
- HttpException
- RedirectException
- ProcessException
- SignalException
- SocketException
- StdinException
- StdoutException
- TlsException
- CertificateException
- HandshakeException
- WebSocketException
- IsolateSpawnException
- TimeoutException
- NullRejectionException

`Error` - это класс для ошибок, которые обычно не могут быть восстановлены, и они указывают на серьезные проблемы в программе или системе:
- OSError
- ArgumentError
- IndexError
- RangeError
- AssertionError
- AsyncError
- ConcurrentModificationError
- JsonUnsupportedObjectError
- JsonCyclicError
- NoSuchMethodError
- OutOfMemoryError
- RemoteError
- StackOverflowError
- StateError
- TypeError
- UnimplementedError
- UnsupportedError

---
<!-- TOC --><a name="--4"></a>
### Правила именования
- Переменные и константы - `lowerCamelCase`
- Классы, миксины, enum-ы - `UpperCamelCase`
Expand Down Expand Up @@ -341,7 +386,7 @@
`RenderObject` - это мутабельный объект дерева визуализации. У него есть родительский объект, а также поле с данными, которое родительский объект использует для хранения специфичной информации, касающейся самого этого объекта, например, его позицию. Данный объект отвечает за отрисовку, учёт размеров и ограничений, прослушивание и обработку нажатий. При необходимости перерисовки помечается как `dirty`. Перерисовывается, используя свой метод `layer`

---
<!-- TOC --><a name="--4"></a>
<!-- TOC --><a name="--5"></a>
### Виды виджетов
`Proxy` - это виджеты, которые хранят некоторую информацию и делают её доступной для потомков. Эти виджеты не принимают непосредственного участия в формировании пользовательского интерфейса, но используются для получения информации, которую они могут предоставить.
- `InheritedWidget`
Expand All @@ -364,7 +409,7 @@
- `Container`

---
<!-- TOC --><a name="--5"></a>
<!-- TOC --><a name="--6"></a>
### Виды элементов
![image](https://user-images.githubusercontent.com/80569772/205450564-87d6c2d0-a994-4d1d-bbaa-2c8f7fb07385.png)
`ComponentElement` - компоновочный элемент, который явно не содержит логику рисования/отображения. Есть метод `build()`, который возвращает виджет. Образуется только при создании виджетов `StatelessWidget`, `StatefulWidget`, `InheritedWidget`.
Expand Down Expand Up @@ -473,7 +518,7 @@
`GestureBinding` отвечает за работу с подсистемой жестов.

---
<!-- TOC --><a name="--6"></a>
<!-- TOC --><a name="--7"></a>
### Каналы платформы

![image](https://user-images.githubusercontent.com/80569772/202891758-b7cc7db9-3b4c-4ce3-9f91-37f9a1a614a1.png)
Expand All @@ -497,7 +542,7 @@
[Подробнее](https://habr.com/ru/post/666272/)

---
<!-- TOC --><a name="--7"></a>
<!-- TOC --><a name="--8"></a>
### Режимы сборки
- `Debug` (`JIT`) для разработки
- `Release` (`AOT`) для публикации приложения
Expand All @@ -515,7 +560,7 @@
- `FFI Plugin` - плагин, в котором для написания специфичных платформенных частей используется [Dart FFI](https://dart.dev/guides/libraries/c-interop). Позволяет запустить код на C / C++

---
<!-- TOC --><a name="--8"></a>
<!-- TOC --><a name="--9"></a>
### Этапы анимации
- `Ticker` просит `SchedulerBinding` зарегистрировать обратный вызов и сообщить `Flutter Engine`, что надо разбудить его, когда появится новый обратный вызов.
- Когда `Flutter Engine` готов, он вызывает `SchedulerBinding` через запрос `onBeginFrame`.
Expand All @@ -525,7 +570,7 @@
- ...

---
<!-- TOC --><a name="--9"></a>
<!-- TOC --><a name="--10"></a>
### Виды анимаций
- `Tween animation`. Начало, конец, время, скорость заранее определенно
- `Physics-based animation`. Имитируют реальное поведение
Expand All @@ -546,7 +591,7 @@
`Animation` отдает текущее значение анимации, а также позволяет подписаться на обновления значения/статуса анимации

---
<!-- TOC --><a name="--10"></a>
<!-- TOC --><a name="--11"></a>
### Построение кадра
1. Некоторые внешние события приводят к необходимости обновления отображения.
2. `Schedule Frame` отправляется к `Flutter Engine`
Expand All @@ -560,7 +605,7 @@
10.

---
<!-- TOC --><a name="--11"></a>
<!-- TOC --><a name="--12"></a>
### Расчёт макета
- Ограничения спускаются вниз по дереву, от родителей к детям.
- Размеры идут вверх по дереву от детей к родителям.
Expand Down Expand Up @@ -688,7 +733,7 @@
`Compute` - это функция, которая создаёт изолят и запускает переданный код.

---
<!-- TOC --><a name="--12"></a>
<!-- TOC --><a name="--13"></a>
### Проблемы многопоточности

- `Deadlock` — каждый из потоков ожидают событий, которые могут предоставить другие потоки
Expand All @@ -703,7 +748,7 @@
Архитектура - это набор решений по организации программы. Таких, как деление программы на слои, построение связей между ними, управление состоянием, связь с UI. Хорошая архитектура делает слои в приложении слабо связанными, что упрощает внесение изменений, повышает тестируемость кода, упрощает систему

---
<!-- TOC --><a name="--13"></a>
<!-- TOC --><a name="--14"></a>
### Чистая архитектура
Чистая архитектура - архитектура, которая следует `SOLID` и делится на три независимых слоя:
- `Data (datasources, models, repositories)` получение данных извне
Expand All @@ -713,7 +758,7 @@
[Пример](https://github.com/ResoCoder/flutter-tdd-clean-architecture-course)

---
<!-- TOC --><a name="--14"></a>
<!-- TOC --><a name="--15"></a>
### Управление состоянием

**Vanilla**
Expand Down Expand Up @@ -802,7 +847,7 @@
`Dependency injection (DI)` - это механизм, который позволяет сделать взаимодействующие в приложении объекты слабосвязанными с помощью интерфейсов. Это делает всю систему более гибкой, более адаптируемой и расширяемой

---
<!-- TOC --><a name="--15"></a>
<!-- TOC --><a name="--16"></a>
### Архитектурные патерны
![](https://fuzeservers.ru/wp-content/uploads/2/6/8/268a107e69309f0529c18aae72769bdb.png)
**MVVM**
Expand Down Expand Up @@ -841,7 +886,7 @@
- Используется в ситуации, когда связь между представление и другими частями приложения невозможна (и Вы не можете использовать MVVM или MVP);

---
<!-- TOC --><a name="--16"></a>
<!-- TOC --><a name="--17"></a>
### Способы осуществления навигации
**Navigator**
- Идёт из коробки
Expand All @@ -859,7 +904,7 @@
- Разные варианты анимаций

---
<!-- TOC --><a name="--17"></a>
<!-- TOC --><a name="--18"></a>
### Базы данных
**Нереляционные (NoSQL):**
**Hive**
Expand Down Expand Up @@ -945,7 +990,7 @@
<!-- TOC --><a name="-9"></a>
## Тестирование

<!-- TOC --><a name="--18"></a>
<!-- TOC --><a name="--19"></a>
### Виды тестов
- `Модульный тест` тестирует одну функцию, метод или класс. Его цель - проверить правильность работы определенной функции, метода или класса. Внешние зависимости для тестируемого модуля обычно передаются как параметр.
- `Виджет тест` тестирует один виджет. Цель такого теста — убедиться, что пользовательский интерфейс виджета выглядит и взаимодействует, как запланировано. Тестирование виджета происходит в тестовой среде, которая обеспечивает контекст жизненного цикла виджета. Также тестируемый виджет должен иметь возможность получать действия и события пользователя и отвечать на них .
Expand All @@ -956,7 +1001,7 @@
### TDD
`TDD` — это методика разработки приложений, при которой сначала пишется тест, покрывающий желаемое изменение, а затем — код, который позволит пройти тест.

<!-- TOC --><a name="--19"></a>
<!-- TOC --><a name="--20"></a>
## Паттерны разработки
*Порождающие*. Отвечают за удобное и безопасное создание новых объектов или даже целых семейств объектов.
- Factory Method (Фабричный Метод). Порождающий паттерн проектирования, который определяет общий интерфейс для создания объектов в суперклассе, позволяя подклассам изменять тип создаваемых объектов.
Expand Down

0 comments on commit dade600

Please sign in to comment.