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)