Как правильно удалить строку из таблицы в Kotlin (Springboot) с помощью JpaRepository из Spring? - PullRequest
0 голосов
/ 30 января 2020

Итак, я изучаю Kotlin и учусь, как сделать его чистым с помощью Spring.

Допустим, у меня есть хранилище для пользователя. Entity:

@Repository
interface UserRepository : JpaRepository<User, Long>

Тогда я хочу чтобы удалить пользователя по его id, я сделал что-то вроде этого:

@DeleteMapping("/{id}")
fun deleteById(@PathVariable(value = "id") id: Long): ResponseEntity<Void> {
    return t.findById(id).map {
        t.delete(it)
        ResponseEntity<Void>(HttpStatus.OK)
    }.orElse(ResponseEntity.notFound().build())
}

Где t было UserRepository, и оно работало просто отлично и выглядело чистым.

Но потом я захотел получить извлечение объект из базы данных logi c вне контроллера, поэтому я сделал сервис.

Как мне go об удалении объекта через сервис, я сделал что-то вроде этого в классе Service:

fun deleteById(id: Long): Boolean = t.findById(id).map {
    t.delete(it)
    true
}.orElse(false)

Где t - Репозиторий, тогда в моем классе Controller я внес следующие изменения:

@DeleteMapping("/{id}")
fun deleteById(@PathVariable(value = "id") id: Long): ResponseEntity<Void> = if (t.deleteById(id)) ResponseEntity<Void>(HttpStatus.OK) else ResponseEntity.notFound().build()

Где t - сервис, но выглядит он очень нечистым. Так как же мне go сделать дополнительный слой, подобный Сервису, и сделать код более чистым?

1 Ответ

1 голос
/ 30 января 2020

Ваш код уже очень короткий и вероятность уменьшения размера очень мала, но я думаю, вы все равно можете выполнить следующие действия:

В вашем service

// use JpaRepository's (existsById) which return a boolean
fun deleteById(id: Long) = if(t.existsById(id)) {t.deleteById(id); true} else false

и в вашем controller

@DeleteMapping("/{id}")
fun deleteById(@PathVariable(value = "id") id: Long) = if (t.deleteById(id)) ResponseEntity<HttpStatus>(HttpStatus.OK) else ResponseEntity<HttpStatus)(HttpStatus.NOT_FOUND)

Важное замечание: Обратите внимание, что в целом вы должны написать код, который легко понятен и может управляться другими , если кому-то пришлось потратить 15 минут на понимание простого оператора if только потому, что вы сделали его одним вкладышем, тогда это не очень хорошее программирование.

Как великий программист однажды сказал

Каждая функция должна быть сделана как можно меньше, но не меньше

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...