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)