Kotlin Springboot -- 9부 도메인

7081 단어 cakotlinspringboot



ドメインロジックの理解のため.
Person 全てではなく、Age が 10 未満の Person のみを返す機能を実装したかったから.

なぜ 게이트웨이 などには書かないか



게이트웨이 は単に 드라이버 の結果を 도메인 に詰め替える為の場所であるべきだから.

なぜ Usecase にロジックを書かないか。



유스케이스
ここをみたら ビジネスの都合で何をしているのかわかってほしい.
だから細かい実装の内容は書くべきではない.

Usecase に処理の呼び出しを書く



  fun getU10Persons():Persons {
    val persons = personsGateway.getAllPersons()
    val age = Age(10)
    return persons.filterByLessThan(age)
  }

Gateway から呼び出したドライバーの処理をドmeinに詰め替えた結果.

このドメインの中のロジックに、さらに Age ドメインを渡して実行する.

도메인 に処理を書く



Persons のドメインに書いて終わりではない.

data class Persons(val list: List<Person>) {
  fun filterByLessThan(age: Age): Persons {
    return Persons(this.list.filter { it.isLessThan(age) })
  }
}


Persons は内部로 Person(이) 一つ一つをmapして
条件に当てはまるものだけを返している.
その条件を Person のドメインに書いている.

data class Person(val name: Name, val age: Age) {
  fun isLessThan(age: Age): Boolean {
    return this.age.isLessThan(age)
  }
}


Person のドメインでは Person の Age に生えている isLessThan の結果を返している

이 で中身の Age instansにアクセスできる.

data class Age(val value: Int) {
  fun isLessThan(other: Age): Boolean {
    return this.value < other.value
  }
}


そして Age の中に比較関数の本體がある.

this.value が Person ドメインに入っている Age の実際の数値.

それに対して引数の比較対象は other.value にしている.

これ(this)と他(기타)の比較.そういう意味.

これで Persons ドメインで isLessThan 라고 하는 ロジックが機能する.


結果







쿼리 でかえられるともっと面白くて実用的かも知れない

  @GetMapping("/persons/{age}")
  @ResponseBody
  fun getPersonsByAge(@PathVariable("age") age: Int): String {

    val persons = personsUsecase.getPersonsByAge(Age(age))


Rest 에서 PathVar 에서 Int 에서 受け取って
Usecase に渡すまえに 나이 に詰めて

  fun getPersonsByAge(age: Age):Persons {
    val persons = personsGateway.getAllPersons()
    return persons.filterByLessThan(age)
  }


後は中で呼べば引数からの絞り込みが完成した.使いやすい.

좋은 웹페이지 즐겨찾기