1

サービスメソッドでデータベース呼び出しを定義したいのですがTransaction、サービス自体で接続を開かずにクラスのコンテキストで実行して、同じトランザクションに複数のサービス呼び出しを含めることができるようにします。

このようなものを探していますが、よくわかりません。

class Transaction {
  init { /** Grab connection **/ }

  fun doSelect() { ... }
}

class UserService {
  fun Transaction.getUser() {
    return doSelect()
  }
}

fun main (args: Array<String>) {
  Transaction() {
    UserService().getUser() // INVALID
    ...
  }
}

これを行う方法はありますか?

次のように、トランザクション インスタンスをサービスに渡すことができることを知っています。

class UserService(tx: Transaction) {
  fun getUser() {
    with(tx) {
      doSelect()
    }
  }
...

fun main (args: Array<String>) {
  Transaction() {
    UserService(this).getUser()
    ...
  }
}

...しかし、よりエレガントなパターンを望んでいます。

4

1 に答える 1

0

システムは逆に動作するため、問題を解決するには、レシーバーを交換します。

fun main (args: Array<String>) {
    UserService().apply {
        Transaction().getUser() 
    }
}
于 2016-03-15T06:53:36.367 に答える