0.1 Ограничения на длину файлов: 300 (исключая импорты). Если выходит больше — разбивать и использовать импортирование.
0.1.1 Ограничение на длину метода: 150 строк.
0.2 Читабельность важна: вложенность кода — не более 4 пунктов (Flat is better than nested), включая функциональную вложенность. Лучше используйте цепочки вызовов.
0.3 Не повторяйтесь. Код должен быть реюзабельным — то есть путем импортирования, а не путем копирования.
0.4 Ваш случай не настолько особенный, чтобы нарушать эти правила (Special cases aren’t special enough to break the rules).
0.5 Пишите декларативный код. Не совмещайте императивный код и декларативный в одном файле.
0.6 Простой код лучше комплексного (принцип KISS)
-
Вёрстка: 1.1 Использовать Bootstrap — подход к верстке должен быть один. 1.2 Вложенность внутри вёрстки не должна превышать 4 блока в худшем случае, в среднем 3 (повышает читабельность).
1.3 Angular шаблоны делить на: Smart и Dumb, то есть те, что используют логику и те, что только отрисовывают (и при этом стратегия обновления OnPush)
1.4 SASS лучше BEM — использовать вложенность SASS, помимо его остальных инструментов.
1.5 Использовать HTML для структуры, CSS для отображения.
1.6 Перезатирающие стили должны быть расположены в папке styles/override/*, например override-mat-btn.scss (не использовать ng-deep)
1.7. Для изменения отображаемых данных использовать только пайпы.
1.8 Для расширения шаблона использовать директивы.
1.9 Пользуйтесь покомпонентами Angular Material.
-
Angular
2.1 Использовать деления на императивные и декларативные сервисы — те, что делают низкоуровневый код и те, что пользуются методами из низкоуровневой (императивной) службы.
2.2 Вложенность кода в шаблоне, .scss и .ts файлах — не должна превышать 4-й степени.
2.3 Измените префикс проекта в angular.json
2.4 Пишите реюзабельные компоненты.
2.5 Пользуйтесь резолверами.
2.6 Мутируйте данные стрима только в пайпе.
2.7 Модули должны лежать внутри app.
2.8 Роуты отдельного модуля должны регистрироваться в этом модуле при помощи RouterModule.forChild
2.9 Структура модуля на примере:
auth/components<= для компонентов
auth/layouts<= для комопнентов-страниц
auth/utils<= directives, pipes, resolvers, guards
auth/services<= для служб2.10 Компоненты layout именовать auth-layout.component.html, они же dumb компоненты.
-
NgRx — желателен (очень).
3.1 NgRx debug tools позволят отследить все изменения данных.
-
RxJS:
4.1 Концепций всё есть stream$ — запрещено использовать subscribe (вместо этого использовать пайп async);
setInterval заменить на пайп interval, timer, использовать пайпы перенаправления стримов. -
Автотесты перед коммитом.
-
Явное лучше неявного.
ngOnInit(){} => public ngOnInit(): void -
Интерфейсы должны быть читабельными — AuthResponseInterface, не
public getUser(): .{name: string} -
Пользоваться дженериками.
-
Минимум (а то и запретить) any в pull request.
-
Об API:
-
API должно быть гибким.
-
Данные должны быть разделены на чанки.
-
Расширяйте код при помощи прототипизирвоания.
-
Использовать lodash — огромное множество методов (сортировка, обработчики, фильтры, цепочки), которые упростят разработку и повысят читабельность кода, вместо того, чтобы думать как, будем думать что.
-
Использовать monent.js для обработки дат внутри сервисов.
-
Git 14.0 Git Flow
14.1 Коммиты должны быть атомарными
-
Использовать JSDoc помимо четкого наименования свойств и методов.
ссылка на оригинал статьи https://habr.com/ru/articles/793432/
Добавить комментарий