You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: university/memos/best-practices.md
+14-13Lines changed: 14 additions & 13 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -65,7 +65,7 @@ sidebar_position: 0
65
65
<ul>
66
66
<li>Преобразуйте сетевые сущности в свои — доменные и используйте их во всем приложении</li>
67
67
<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>
69
69
<li>Доменная сущность пишется независимо от серверной, она включает только то, что реально будет использоваться приложением, а не хранит абсолютно все данные, полученные от сервера</li>
70
70
</ul>
71
71
</details>
@@ -141,7 +141,7 @@ sidebar_position: 0
141
141
<details>
142
142
<summary>Никогда не обрабатывайте <code>Error</code>-ы в <code>catch</code></summary>
143
143
<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>
<summary> Устанавливайте версии подов в <code>Podfile</code></summary>
155
155
<ul>
156
156
<li> Версии установленных подов можно посмотреть после установки подов в файле <code>Podfile.lock</code></li>
157
-
<li> Если версии подов не будут явно обозначены - то у нового разработчика, или у тебя (на другом компе) при установке подов могут подтянуться более новые версии. Есть вероятность, что в этих новых подах что-то будет изменено и проект не скомпилируется. Либо, как сейчас популярно, в библиотеку всунут зловредный код в новой версии, он тоже скачается :) </li>
157
+
<li> Если версии подов не будут явно обозначены - то у нового разработчика или у тебя (на другом компе) при установке подов могут подтянуться более новые версии. Есть вероятность, что в этих новых подах что-то будет изменено и проект не скомпилируется. Либо, как сейчас популярно, в библиотеку всунут зловредный код в новой версии, и он тоже скачается :) </li>
Все <code>ViewController</code>-ы должны называться с окончанием <code>ViewController</code>, а не <code>Screen</code>, потому что <code>Screen</code> — это экран девайса. <code>ViewController</code> не обязательно занимает весь экран, их на экране сразу несколько: твой собственный, <code>UINavigationController</code>, <code>UITabBarController</code>, модалки
В UIKit-экранах используйте суффикс <code>ViewController</code> — это системная сущность, которая не обязательно занимает весь экран (их может быть несколько: ваш контроллер, <code>UINavigationController</code>, <code>UITabBarController</code>, модалки).
164
+
В SwiftUI и на Android (Compose) для экранов приложения используйте суффикс <code>Screen</code> — это абстракция экрана приложения, а не экран девайса.
164
165
</details>
165
166
1.
166
167
<details>
@@ -207,7 +208,7 @@ SplashScreen делать в `LaunchScreen.storyboard`, а не в `SplashViewCo
207
208
<summary>Работа с ресурсами из <code>R.swift</code></summary>
208
209
<ul>
209
210
<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>
211
212
</ul>
212
213
</details>
213
214
@@ -248,7 +249,7 @@ SplashScreen делать в `LaunchScreen.storyboard`, а не в `SplashViewCo
248
249
## Android
249
250
### Logic
250
251
1.
251
-
Compose не используйте `lifecycleScope` для задач, связанных с UI. Для корутин, живущих только пока composable в композиции, используйте `LaunchedEffect` или `rememberCoroutineScope()`.
252
+
В рамках Composable функций не используйте `lifecycleScope` для задач, связанных с UI. Для корутин, живущих только во время композиции, используйте `LaunchedEffect` или `rememberCoroutineScope()`.
252
253
1.
253
254
Обрабатывайте стейты на Android [правильно](../../learning/state#обработка-на-android)
- Проверяйте, чтобы у MR не было конфликтов. Если конфликты есть, вам нужно смержить ветку, в которую вы собираетесь мержить в ту, которую вы собираетесь мержить, и исправить конфликты
330
-
- При повторной отправке на ревью пройдитесь по всем предыдущим комментариям и убедитесь, что все исправили, отвечайте на каждый коммент, чтобы ничего не пропустить и ревьювер сразу понимал, что вы это исправили
331
-
- После каждого коммита выделяйте немного времени, чтобы отсмотреть все изменения, на наличие ошибок, перечисленных на этой странице.
330
+
- Проверяйте, чтобы у MR не было конфликтов. Если конфликты есть, вам нужно смержить целевую ветку ("destination", главная/основная ветка) в ветку с вашими изменениями ("source", ваше ответвление от основной ветки) и исправить конфликты
331
+
- При повторной отправке на ревью пройдитесь по всем предыдущим комментариям и убедитесь, что все исправили. Отвечайте на каждый комментарий, чтобы ничего не пропустить и чтобы ревьювер сразу понимал, что вы это исправили.
332
+
- После каждого коммита выделяйте немного времени, чтобы отсмотреть все изменения на наличие ошибок, перечисленных на этой странице.
332
333
- Обязательно обращайте внимание на [критичные для ревью пункты](#критичные-пункты-для-ревью). Ошибки в этих пунктах будут ***прерывать*** ревью.
333
334
- После создания итогового merge request, отсмотрите все сделанные в нем изменения. Благодаря тому, что вы проверяли их после каждого коммита, это не займет у вас слишком много времени.
334
335
- Чем чаще вы будете перепроверять себя, тем больше ошибок будете видеть и сможете не допускать их в будущем
0 commit comments