DEV Community

kaede
kaede

Posted on

Kotlin Springboot -- Part 4 Domain で Value Object を定義して Driver->Gateway->Usecase と連れ込んでいく

Domain

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

オブジェクト指向らしく、全てのプロパティをデータクラスで定義する。
細かいデータクラスを Person, Persons でまとめていく

https://blog.applibot.co.jp/2018/03/22/inheritance-for-dataclass-kotlin/

data class は getter/setter などをはやしてくれるもの


Driver

ここから先は全ての層ごとにひとつのクラスで書く

class PersonDriver() { companion object { private val data:Persons = Persons(listOf( (Person(Name("taro"), Age(12))), (Person(Name("hanako"), Age(10))), )) fun findAll():Persons { return data } } } 
Enter fullscreen mode Exit fullscreen mode

コンパニオンオブジェクトで書くとクラス外部から参照できる。
ドメインをつかってデータを定義して
全てを返す関数の findAll を作る


Gateway

class PersonsGateway() { companion object { fun getAllPersons():Persons { return PersonDriver.findAll() } } } 
Enter fullscreen mode Exit fullscreen mode

Driver の findAll を呼ぶ


Usecase

class PersonsUsecase() { companion object { fun getAllPersons():Persons { return PersonsGateway.getAllPersons() } } } 
Enter fullscreen mode Exit fullscreen mode

Gateway の getAllPersons を呼ぶ
同名で定義するので処理はない。
CA の理解のための形式的なもの。


REST

@Controller class PersonHandler { @GetMapping("/persons") fun getAllPersons(model:Model): String { val persons: Persons = PersonsUsecase.getAllPersons() model["title"] = persons.toString() return "index" } } 
Enter fullscreen mode Exit fullscreen mode

Usecase から呼び出して /persons へのマッピングに当てる


Web

みれる

Image description

Top comments (0)