Hello, World
DI とは
Weblio辞書から引用
DIとは、プログラミングにおけるデザインパターン(設計思想)の一種で、オブジェクトを成立させるために必要となるコードを実行時に注入(Inject)してゆくという概念のこと
現在Go言語でクリーンアーキテクチャを使用して開発をしているのですが、、依存関係のメソッドを呼び出すのにwireを利用したのでメモしておきます。
wireの使い方
go get github.com/google/wire/cmd/wire
プロジェクトにdiディレクトリを作成し、その中にwire.goを作成して以下を記述します。
// +build wireinject
package di
func InitReview() handler.Review {
wire.Build(
db.New,
repository.NewReview,
usecase.NewReview,
handler.NewReview,
)
return nil //明示的にnilを返す
}
このwire.Buildのカッコ内に依存関係を解決するメソッドを全て(順不同)入れます。
クリーンアーキテクチャを採用している場合だと例えばrepositoryはDBの値を実際に操作するパッケージ(一番外側のinfra層になる)としていますが、これをusecaseで呼び出すときに外側のinfra層からは呼び出せないので、usecase層よりも内側で空のインターフェースの中の関数を呼び出しています。その依存関係を解決して実際のinfraの関数をdiを使って呼び出しています。
このコードをもとに、実際に使うメソッドを生成するコマンドを打ちます。
wire ./di/wire.go
func InitReview() handler.Review {
conn := db.New()
review := repository.NewReview(conn)
usecaseReview := usecase.NewReview(review)
handlerReview := handler.NewReview(usecaseReview)
return handlerReview
こんな感じの関数が生成されたら成功です。あとは実際にこの関数をhandlerで呼び出してあげれば全て使用することができます。お疲れ様でした。
すごくざっくり書いたので質問や訂正あればコメントお願いします。以上です。