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
+8-4Lines changed: 8 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -77,7 +77,7 @@ _Антуан де Сент-Экзюпери_
77
77
78
78
### 4: Модель
79
79
80
-
- 4.1: В БД обычно хранятся все введенные пользователем и админом данные (история). Они не удаляются и не переписываются заново. Есть базовые вещи, которые закладываются в архитектуру приложения, и есть неочевидные доработки к ТЗ, делать не надо.
80
+
- 4.1: В БД обычно хранятся все введенные пользователем и админом данные c возможность их редактирования. Это означает, что мы не удаляем прошлые меню, а храним их в базе, как и историю голосования. Есть базовые вещи, которые закладываются в архитектуру приложения, и есть неочевидные доработки к ТЗ, делать не надо.
81
81
- 4.2: Не делайте в модели объектов, которые не будут использоваться в коде (например, не надо двунаправленных связей, если достаточно однонаправленных)
82
82
- 4.3: еще раз про [hashCode/equals в Entity](https://stackoverflow.com/questions/5031614/the-jpa-hashcode-equals-dilemma): не делайте в модели сравнение по полям!
83
83
- 4.4: ORM работает с объектами. [Иногда, для упрощения логики, fk_id как поля допустимы](https://stackoverflow.com/questions/6311776/hibernate-foreign-keys-instead-of-entities)
@@ -97,9 +97,8 @@ _Антуан де Сент-Экзюпери_
97
97
### 6: Доступ к БД
98
98
99
99
- 6.1: Используйте Spring Data JPA (без лишней делегации). Методы Repository можно вызывать напрямую из сервиса или из контроллера.
100
-
- 6.2: Если приложению в объекте требуется только его id, используйте reference (`getReferenceById`)
101
-
- 6.3: В DATA-JPA 2.x используются `Optional`. Попробуйте работать с ними, это безопасный способ работать с null-значениями (используйте `orElseThrow`)
102
-
- 6.4: Не делайте при обновлении записи ради экономии пары строчек кода так:
100
+
- 6.2: В DATA-JPA 2.x используются `Optional`. Попробуйте работать с ними, это безопасный способ работать с null-значениями (используйте `orElseThrow`)
101
+
- 6.3: Не делайте при обновлении записи ради экономии пары строчек кода так:
103
102
```
104
103
if(updateCondition)
105
104
repository.delete(entity)
@@ -123,6 +122,7 @@ repository.save(entity)
123
122
124
123
- 8.1: Проверьте, станет ли код проще с `@AuthenticationPrincipal` (урок 11, доступ к AuthorizedUser).
125
124
- 8.2: Я предпочитаю четкое разделение ролей на основе URL. Для админа URL содержит `/admin`
125
+
- 8.3: Еще раз - призываю не менять код TopJava
126
126
127
127
### 9: Кэширование
128
128
@@ -163,3 +163,7 @@ repository.save(entity)
163
163
- 13.2: API ДОЛЖЕН соответствовать принципам REST (см. ссылки выше)
164
164
- 13.3: ОБЯЗАТЕЛЬНО: запустите `mvn test` - ошибок быть не должно
165
165
- 13.4: ОБЯЗАТЕЛЬНО: запустите приложение без всяких предварительных настроек (базы, переменных окружения, ..), лучше на другом компьютере. Приложение должно запускаться и работать!
166
+
167
+
## Оценка
168
+
ТЗ очень скромное, не дает понимания, что хочет получить заказчик, именно поэтому моих комментариев к этому ТЗ больше на 2 порядка. Это реальное тестовое задание на работу. При оценке учитывается отсутствие грубых ляпов, простота и красота решения + его расширяемость, если понадобится дорабатывать приложение. Если практический опыт небольшой, еще раз очень рекомендую держаться как можно ближе к нашему коду на Spring Boot.
169
+
Тестовое задание дается для того, чтобы оценить вас, как программиста. Нужны ли вы компании или нет. Это умение спроектировать грамотную модель и API, придерживаясь принципов REST и без своих велосипедов, и ваш чистый красивый код.
0 commit comments