DEV Community

kaede
kaede

Posted on

Kotlin Springboot -- Part 6 Driver で Entity のデータクラスとインスタンスを作り Gateway で Domain に変換する

why

Driver で Domain を返すのをやめて、Entity を返すようにする。

いままでは Driver で Domain を返していたが
クリーンアーキテクチャ的には Driver が Domain にアクセスできててはいけないから。


Entity とは?

データの実態。
DB から返ってくるもの。

Domain と同じ data class ではあるが

data class Persons(val list: List<Person>)
data class Person(val name: Name, val age: Age)
data class Name(val value: String)
data class Age(val value: Int)
Enter fullscreen mode Exit fullscreen mode

オブジェクト指向な Domain で作られる詳細なものと違い
こんなに最小単位迄作らなくて良い。

  data class PersonEntity(val name: String , val age: Int)
Enter fullscreen mode Exit fullscreen mode

これくらいまでで良いと解釈した。


Driver

//  private val data:Persons = Persons(listOf(
//    (Person(Name("taro"), Age(12))),
//    (Person(Name("hanako"), Age(10))),
//  ))
Enter fullscreen mode Exit fullscreen mode

このようにガッツリドメインつけて作っていた
インメモリのデータを

  data class PersonEntity(val name: String , val age: Int)

  val taro = PersonEntity("taro", 3)
  val hana = PersonEntity("hana", 5)
  val persons = listOf<PersonEntity>(taro,hana)
Enter fullscreen mode Exit fullscreen mode

Entity を作って、そこからインスタンスでつくってまとめるようにした。

 fun findAll(): List<PersonEntity> {
    return persons
  }
Enter fullscreen mode Exit fullscreen mode

そしてこれを Gateway に返す。


Gateway

PersonsEntity で受け取ったものを
Domain の Persons のナカで展開して、Domain の Person をつけて返す。

これで Entity から Domain に変換できている。

class PersonsGateway(
  val personsDriver: PersonsDriver
) {
  fun getAllPersons():Persons {
    val persons = personsDriver.findAll()
    return Persons(persons.map { person ->
      Person(
        Name(person.name),
        Age(person.age)
      )
    })
  }
}
Enter fullscreen mode Exit fullscreen mode

まとめ

インメモリで CA をする場合は
Driver では Entity を data class でつくり
そのインスタンスを返す。

そして Gateway で Domain にして返す。

Top comments (0)