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)
オブジェクト指向な Domain で作られる詳細なものと違い
こんなに最小単位迄作らなくて良い。
data class PersonEntity(val name: String , val age: Int)
これくらいまでで良いと解釈した。
Driver
// private val data:Persons = Persons(listOf(
// (Person(Name("taro"), Age(12))),
// (Person(Name("hanako"), Age(10))),
// ))
このようにガッツリドメインつけて作っていた
インメモリのデータを
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)
Entity を作って、そこからインスタンスでつくってまとめるようにした。
fun findAll(): List<PersonEntity> {
return persons
}
そしてこれを 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)
)
})
}
}
まとめ
インメモリで CA をする場合は
Driver では Entity を data class でつくり
そのインスタンスを返す。
そして Gateway で Domain にして返す。
Top comments (0)