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: graduation.md
+6-7Lines changed: 6 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -97,7 +97,7 @@ _Антуан де Сент-Экзюпери_
97
97
### 6: Доступ к БД
98
98
99
99
- 6.1: Используйте Spring Data JPA (без лишней делегации). Методы Repository можно вызывать напрямую из сервиса или из контроллера.
100
-
- 6.2: Если приложению в объекте требуется только его id, используйте reference (`getById`)
100
+
- 6.2: Если приложению в объекте требуется только его id, используйте reference (`getReferenceById`)
101
101
- 6.3: В DATA-JPA 2.x используются `Optional`. Попробуйте работать с ними, это безопасный способ работать с null-значениями (используйте `orElseThrow`)
102
102
- 6.4: Не делайте при обновлении записи ради экономии пары строчек кода так:
103
103
```
@@ -114,16 +114,15 @@ repository.save(entity)
114
114
- 7.2: Тщательно считайте количество обращений в базу на каждый запрос. Особенно при запросах от юзеров, которых очень много! Также на сложность запросов от них, чтобы не положить базу
115
115
- 7.3: Сделайте [индексы к таблицам](https://ru.wikipedia.org/wiki/Индекс_(базы_данных)). Попробуйте обеспечить UNIQUE (один голос пользователя в день, один уникальный пункт меню в день).
116
116
Следите за **порядком полей в индексе**, от этого зависит индексирование запросов.
117
-
- 7.4: При популировании добавь записи за сегодняшний день - `now()`, чтобы всегда были актуальные исходные данные
117
+
- 7.4: При популировании добавь записи за сегодняшний день - `now()`, чтобы всегда были актуальные исходные данные
118
118
- 7.5: Поля базы case insensitive, не пишите camelStyle (для которых нужны кавычки)
119
119
- 7.6: Таблицы обычно именуются в единственном числе. Исключение - `users`, `orders` и другие зарезервированные слова
120
120
- 7.7: `date`/`timestamp` - зарезервированное слово, лучше избегать их при именовании полей
121
121
122
122
### 8: Security
123
123
124
-
- 8.1: Проверьте, станет ли код проще с `@AuthenticationPrincipal` (урок 11, Доступ к AuthorizedUser).
124
+
- 8.1: Проверьте, станет ли код проще с `@AuthenticationPrincipal` (урок 11, доступ к AuthorizedUser).
125
125
- 8.2: Я предпочитаю четкое разделение ролей на основе URL. Для админа URL содержит `/admin`
126
-
- 8.3: Еще раз - призываю не менять код TopJava
127
126
128
127
### 9: Кэширование
129
128
@@ -133,8 +132,8 @@ repository.save(entity)
133
132
134
133
### 10: Валидация
135
134
136
-
- 10.1: Одних аннотаций валидации недостаточно. Должны быть `@Valid/@Validation`
137
-
- 10.2: Проверяйте входные данные при `create/update` в контроллерах! В TopJava это `ValidationUtil.checkNew()/assureIdConsistent()`
135
+
- 10.1: Одних аннотаций валидации на полях недостаточно. Должны быть `@Valid/@Validation` в контроллере
136
+
- 10.2: Прячте `id`при `create/update` в примерах Swagger. Если их передали - проверяйте на соответствие (в TopJava это `ValidationUtil.checkNew()/assureIdConsistent()`)
138
137
139
138
### 11: Дополнительно
140
139
@@ -145,7 +144,7 @@ repository.save(entity)
145
144
146
145
- 12.1: Поместите вначале `readme` ТЗ или **ссылку на него** - будет понятно о чем твой проект
147
146
- 12.2: Если задание на English, описание пиши также на English (то же самое относится к языку резюме: вакансия на English предполагает резюме на English)
148
-
- 12.3: Требуемые примеры `curl` не прячьте, а пишите здесь! Оптимально здесь должна быть ссылка на `Swagger UI` с креденшелами для выполнения запросов
147
+
- 12.3: Требуемые примеры `curl` не прячьте, а пишите здесь! Оптимально сделать **ссылку на `Swagger UI` с креденшелами для выполнения запросов**
149
148
- 12.4: Проверяют люди с опытом в Java: не надо писать инструкций, как устанавливать Java и Maven
0 commit comments