Kotlin Springboot -- Part 10 포트 라고 하는 인터페이스 を作っ て 유스케이스 와 게이트웨이 をつなぐ
7194 단어 springbootkotlinca
왜
前回まで、CA で必須である Port を省略していた.
이 Kotlin 기반으로 포트에서 사용하는 인터페이스를 사용하는 방법
interface である 포트 を作る
package com.example.springboot
interface PersonPort {
fun getAllPersons(): Persons
}
名前と返り値の型だけ定義
Gateway をインターフェースから実装するようにする
Kotlin の文法に従って interface の中身を実装する.
クラスに実装元?の 인터페이스 を書く.型みたいに.
override を関数につけて中身を書く.
クラスの引数では Driver の インスタンスを取れなくなる.
なのでクラス外部に Driver のインスタンスを作成して
そのinstanceをclasの内部の関数で使う.
package com.example.springboot
import org.springframework.stereotype.Component
val personsDriver = PersonsDriver()
@Component
class PersonsGateway: PersonPort {
override fun getAllPersons():Persons {
val persons = personsDriver.findAll()
return Persons(persons.map { person ->
Person(
Name(person.name),
Age(person.age)
)
})
}
}
Usecase で Port 에서 Gateway の関数を呼び出す
class PersonsUsecase(
private val personPort: PersonPort,
) {
fun getAllPersons():Persons {
println("Usecase/")
println("getAllPersons/")
return personPort.getAllPersons()
}
fun getPersonsByAge(age: Age):Persons {
val persons = personPort.getAllPersons()
return persons.filterByLessThan(age)
}
}
Usecase では引数を Gateway の instancesから Port の instancesに変更する.
そして Port の Instance에서 呼ぶ と、 Gateway の Instance に つながる.
쉬다
// 20220921234906
// http://localhost:8080/persons
{
"persons": [
{
"name": "taro",
"age": 3
},
{
"name": "hana",
"age": 5
},
{
"name": "Dominique",
"age": 11
},
{
"name": "Jackson",
"age": 11
}
]
}
나머지 は何も変わらず、これでクリーンに API が分離できた.
依存性逆転、中央に依存性を持ってくることができたのだ.
まとめ
criーンアーキテクチャで依存性逆転をしたい時は
포트니인타페스를 작
そこから Gateway で実装を書いて
Usecase로는
@Component
の依存性注入로 Port を入れ라고포트 の関数を呼ぶようにする.それで 게이트웨이 が呼ばれる.
これでようやく
휴식 > (도메인) > 사용 사례 > 포트 > 도메인 > 게이트웨이 > 드라이버
というクリーンアーキテクチャの 6 層の分離ができた.
Reference
이 문제에 관하여(Kotlin Springboot -- Part 10 포트 라고 하는 인터페이스 を作っ て 유스케이스 와 게이트웨이 をつなぐ), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/kaede_io/kotlin-springboot-part-10-port-toiu-interface-wozuo-tute-usecase-to-gateway-wotunagu-49jc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)