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)