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)
オブジェクト指向らしく、全てのプロパティをデータクラスで定義する。
細かいデータクラスを 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
}
}
}
コンパニオンオブジェクトで書くとクラス外部から参照できる。
ドメインをつかってデータを定義して
全てを返す関数の findAll を作る
Gateway
class PersonsGateway() {
companion object {
fun getAllPersons():Persons {
return PersonDriver.findAll()
}
}
}
Driver の findAll を呼ぶ
Usecase
class PersonsUsecase() {
companion object {
fun getAllPersons():Persons {
return PersonsGateway.getAllPersons()
}
}
}
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"
}
}
Usecase から呼び出して /persons へのマッピングに当てる
Web
みれる
Top comments (0)