LoginSignup
0
0

Springを使っている時に静的メソッドじゃなくてDIを使うようにした

Posted at

状態を持たないロジックを実装したいとき、以前は以下のように書いていました。
静的なクラスメソッドを使って、判定するみたいな。

class Validator private constructor() {
    companion object {
        fun validate(foo: String){
            if foo == "NG"{
                throw Exception("validation error")
            }
        }
    }
}

呼び出し元イメージ

@RestController
class Controller(service: Service){
    fun bar(@GetMapping String foo) {
        Validator.validate(foo)
        service.someMethod(foo)
    }
}

ただ、現在はSpringを使って開発しており、DIが容易にできるようになりました。
以下のようなコンポーネントを作成し、DIをした方がよいのではないかと思い、実装方針を変えてみました。

理由としては、テスト時にmockしやすいのが一番の理由です。

@Component
class Validator {
    fun validate(foo: String) {
        if foo == "NG"{
            throw Exception("validation error")
        }
    }
}

呼び出し元イメージ

@RestController
class Controller(service: Service, validator: Validator){
    fun bar(@GetMapping String foo) {
        validator.validate(foo)
        service.someMethod(foo)
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0