Skip to content

Commit 1fbbd05

Browse files
author
Kuzmin
committed
fix after review
1 parent c730dab commit 1fbbd05

1 file changed

Lines changed: 14 additions & 13 deletions

File tree

university/memos/best-practices.md

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ sidebar_position: 0
6565
<ul>
6666
<li>Преобразуйте сетевые сущности в свои — доменные и используйте их во всем приложении</li>
6767
<li>Если в приложении вы работаете с сетевыми сущностями, то в случае, если на сервере что-то изменят, например изменят имя какого-то поля или поменяют вложенность полей, то вам придется исправлять все места, где используется эта сущность. <p>А если при получении сетевой сущности вы сразу преобразуете(маппите) ее в доменную, то при изменении сетевой вам нужно будет просто изменить функцию-маппер.</p></li>
68-
<li>Если от сервера где-то приходит <code>null</code> вы можете как-то заменить на <code>not-null</code> значение, чтобы удобнее работать в приложении. Например, если приходит поле <code>description = null</code> — в маппере можно заменить на пустую строку</li>
68+
<li>Если от сервера где-то приходит <code>null</code>, вы можете как-то заменить его на <code>not-null</code> значение, чтобы удобнее работать в приложении. Например, если приходит поле <code>description = null</code> — в маппере можно заменить его на пустую строку</li>
6969
<li>Доменная сущность пишется независимо от серверной, она включает только то, что реально будет использоваться приложением, а не хранит абсолютно все данные, полученные от сервера</li>
7070
</ul>
7171
</details>
@@ -141,7 +141,7 @@ sidebar_position: 0
141141
<details>
142142
<summary>Никогда не обрабатывайте <code>Error</code>-ы в <code>catch</code></summary>
143143
<ul>
144-
<li>У <code>Throwable</code> два наследника — <code>Exception</code> и <code>Error</code>. <code>Exception</code> нужно обрабатывать, они исправимы, а <code>Error</code>-ы — неисправимы, их обрабатывать не надо. Приложение должно упасть с информацией о том, что пошло не так (в <code>Error</code> эта информация)</li>
144+
<li>У <code>Throwable</code> два наследника — <code>Exception</code> и <code>Error</code>. <code>Exception</code> нужно обрабатывать, они исправимы, а <code>Error</code>-ы — неисправимы, их обрабатывать не надо. Приложение должно упасть с информацией о том, что пошло не так (в <code>Error</code> эта информация есть)</li>
145145
<li> изучите <a href="https://rollbar.com/blog/java-exceptions-hierarchy-explained/">документацию</a></li>
146146
</ul>
147147
</details>
@@ -154,13 +154,14 @@ sidebar_position: 0
154154
<summary> Устанавливайте версии подов в <code>Podfile</code></summary>
155155
<ul>
156156
<li> Версии установленных подов можно посмотреть после установки подов в файле <code>Podfile.lock</code></li>
157-
<li> Если версии подов не будут явно обозначены - то у нового разработчика, или у тебя (на другом компе) при установке подов могут подтянуться более новые версии. Есть вероятность, что в этих новых подах что-то будет изменено и проект не скомпилируется. Либо, как сейчас популярно, в библиотеку всунут зловредный код в новой версии, он тоже скачается :) </li>
157+
<li> Если версии подов не будут явно обозначены - то у нового разработчика или у тебя (на другом компе) при установке подов могут подтянуться более новые версии. Есть вероятность, что в этих новых подах что-то будет изменено и проект не скомпилируется. Либо, как сейчас популярно, в библиотеку всунут зловредный код в новой версии, и он тоже скачается :) </li>
158158
</ul>
159159
</details>
160160
1.
161161
<details>
162-
<summary> Называйте <code>ViewController</code>-ы правильно</summary>
163-
Все <code>ViewController</code>-ы должны называться с окончанием <code>ViewController</code>, а не <code>Screen</code>, потому что <code>Screen</code> — это экран девайса. <code>ViewController</code> не обязательно занимает весь экран, их на экране сразу несколько: твой собственный, <code>UINavigationController</code>, <code>UITabBarController</code>, модалки
162+
<summary> Называйте экраны приложения правильно</summary>
163+
В UIKit-экранах используйте суффикс <code>ViewController</code> — это системная сущность, которая не обязательно занимает весь экран (их может быть несколько: ваш контроллер, <code>UINavigationController</code>, <code>UITabBarController</code>, модалки).
164+
В SwiftUI и на Android (Compose) для экранов приложения используйте суффикс <code>Screen</code> — это абстракция экрана приложения, а не экран девайса.
164165
</details>
165166
1.
166167
<details>
@@ -207,7 +208,7 @@ SplashScreen делать в `LaunchScreen.storyboard`, а не в `SplashViewCo
207208
<summary>Работа с ресурсами из <code>R.swift</code></summary>
208209
<ul>
209210
<li>Когда вы добавили картинки, цвета и другие ресурсы в Assets, вы можете получить к ним доступ через <code>R.swift</code>, например: <code>R.image.somethingImage()</code></li>
210-
<li>Некоторые ресурсы, такие как цвета, <code>R.swift</code> возвращает <code>nullable</code>. В этом случае <code>guard</code> обработку делать не нужно, потому что раз <code>R.swift</code> предоставил доступ к переменной, значит смог ее сгенерировать на основе цвета. <p>Поэтому, чтобы узнать о том, что при наличии переменной ресурса самого ресурса нет — можно использовать форскаст. Таким образом, если все таки произойдет ошибка — мы будем разбираться в причине, а если бы мы обработали <code>null</code> — то не узнали бы, что такая ошибка может произойти</p></li>
211+
<li>Некоторые ресурсы, такие как цвета, <code>R.swift</code> возвращает <code>nullable</code>. В этом случае <code>guard</code> обработку делать не нужно, потому что раз <code>R.swift</code> предоставил доступ к переменной, значит смог ее сгенерировать на основе цвета. <p>Поэтому, чтобы узнать о том, что при наличии переменной ресурса самого ресурса нет — можно использовать форскаст. Таким образом, если все-таки произойдет ошибка — мы будем разбираться в причине, а если бы мы обработали <code>null</code> — то не узнали бы, что такая ошибка может произойти</p></li>
211212
</ul>
212213
</details>
213214

@@ -248,7 +249,7 @@ SplashScreen делать в `LaunchScreen.storyboard`, а не в `SplashViewCo
248249
## Android
249250
### Logic
250251
1.
251-
Compose не используйте `lifecycleScope` для задач, связанных с UI. Для корутин, живущих только пока composable в композиции, используйте `LaunchedEffect` или `rememberCoroutineScope()`.
252+
В рамках Composable функций не используйте `lifecycleScope` для задач, связанных с UI. Для корутин, живущих только во время композиции, используйте `LaunchedEffect` или `rememberCoroutineScope()`.
252253
1.
253254
Обрабатывайте стейты на Android [правильно](../../learning/state#обработка-на-android)
254255
1.
@@ -300,12 +301,12 @@ request.removeObserver(requestObserver)
300301
<li>Хороший нейминг: <code>DetailInfoScreen</code> и <code>DetailInfoContent</code></li>
301302
</ul>
302303
</details>
303-
1. Отступы всегда должны быть кратны ***4*** (4, 8, 16, 24, 32), если в дизайне по-другому, задавайте вопросы
304+
1. Отступы всегда должны быть кратны 4 (4, 8, 16, 24, 32). Если в дизайне по-другому, задавайте вопросы
304305
1. Если какой-то набор элементов используется на нескольких экранах — выносите его в отдельную `Composable` функцию и переиспользуйте
305-
1. Не передавай ViewModel глубоко в дерево функций, UI должен зависеть от данных, а не от ViewModel.
306+
1. Не передавайте ViewModel глубоко в дерево функций. UI должен зависеть от данных, а не от ViewModel.
306307
1.
307308
<details>
308-
<summary>State hoisting — выноси состояние наверх</summary>
309+
<summary>State hoisting — выносите состояние наверх</summary>
309310
<ul>
310311
<li>Composable должны быть максимально «тупыми».
311312
Плохо:
@@ -326,9 +327,9 @@ request.removeObserver(requestObserver)
326327
</details>
327328

328329
## Перед отправкой на ревью
329-
- Проверяйте, чтобы у MR не было конфликтов. Если конфликты есть, вам нужно смержить ветку, в которую вы собираетесь мержить в ту, которую вы собираетесь мержить, и исправить конфликты
330-
- При повторной отправке на ревью пройдитесь по всем предыдущим комментариям и убедитесь, что все исправили, отвечайте на каждый коммент, чтобы ничего не пропустить и ревьювер сразу понимал, что вы это исправили
331-
- После каждого коммита выделяйте немного времени, чтобы отсмотреть все изменения, на наличие ошибок, перечисленных на этой странице.
330+
- Проверяйте, чтобы у MR не было конфликтов. Если конфликты есть, вам нужно смержить целевую ветку ("destination", главная/основная ветка) в ветку с вашими изменениями ("source", ваше ответвление от основной ветки) и исправить конфликты
331+
- При повторной отправке на ревью пройдитесь по всем предыдущим комментариям и убедитесь, что все исправили. Отвечайте на каждый комментарий, чтобы ничего не пропустить и чтобы ревьювер сразу понимал, что вы это исправили.
332+
- После каждого коммита выделяйте немного времени, чтобы отсмотреть все изменения на наличие ошибок, перечисленных на этой странице.
332333
- Обязательно обращайте внимание на [критичные для ревью пункты](#критичные-пункты-для-ревью). Ошибки в этих пунктах будут ***прерывать*** ревью.
333334
- После создания итогового merge request, отсмотрите все сделанные в нем изменения. Благодаря тому, что вы проверяли их после каждого коммита, это не займет у вас слишком много времени.
334335
- Чем чаще вы будете перепроверять себя, тем больше ошибок будете видеть и сможете не допускать их в будущем

0 commit comments

Comments
 (0)