evrone / go-clean-template

Clean Architecture template for Golang services
MIT License
6.35k stars 536 forks source link

About multiple usecases #201

Open YJack0000 opened 1 year ago

YJack0000 commented 1 year ago

Hello, I am a new to golang and clean arch! And I am curious about the design of the usecase directory

When I start a program, the repo and the webapi part are just directly injected into the usecase and create a translationUseCase. Does it means that the translation usecase just representing the all usecases? But what if I want to add new usecases?

translationUseCase := usecase.New(
    repo.New(pg),
    webapi.New(),
)

If I trying to use more usecase.New in my project like

AUseCase := usecase.NewA(
    repo.New(pg),
    webapi.New(),
)
BUseCase := usecase.NewB(
    repo.New(pg),
)

And I have to append a lot of params to v1.NewRouter(handler, l, testUseCase) For example:

v1.NewRouter(handler, l, AUseCase, BUseCase)

If I do this, the NewRouter params will just grow as far as the project grow. It seem not like a good way to solve that.

Does anyone have idea about it?

melazyk commented 1 year ago

I'm trying to use this template, but I'm stuck with the same damn problem. Can't seem to find a way out of this mess.

ysomad commented 12 months ago

Don't use the template, make your own code architecture for a project you building.

SebUndefined commented 10 months ago

You could create a "Deps" structure. Initialize it with a constructor and pass this structure to the router.

´´´ type Deps struct { UseCaseA *usecases.UseCaseA ... } ´´´