VIPERBook1Samples icon indicating copy to clipboard operation
VIPERBook1Samples copied to clipboard

共通処理について

Open jormungand2006 opened this issue 4 years ago • 0 comments

@yimajo

度々質問して恐縮ですが、 Dependencyを用いる場合、複数の画面での共通処理はどのようにアプローチするのが良いでしょうか?

例えばアプリで画面が10個あるとして、 その内5個はログインが必須の画面とします。

全画面で用いるような処理の場合は、 BasePresenterやBaseRouterのようなものが欲しくなり、 ログイン必須の画面用にはログイン処理の共通化が欲しくなるので、 BasePresenterを継承したLoginablePresenterを作って、 更に各画面は画面固有の処理があるのならば、LoginablePresenterを継承したHogePresenterを作るイメージでしょうか?

もう1つ訊きたいのが、似たような複数の画面がページコンテンツとしてあり、使うAPIは異なるので、 Interactorは別にしたいなと思っているのですが、 例えば、↓のようにではなく、

class ContentBasePresenter: AnyObject { struct Dependency { let wireframe: GithubReposSearchWireframe let githubRepoRecommend: AnyUseCase<Void, [GithubRepoEntity], Never> let githubRepoSearch: AnyUseCase<String, [GithubRepoEntity], Error> let githubRepoSort: AnyUseCase<[GithubRepoEntity], [GithubRepoEntity], Never> } }

こういう事がしたいのですが、structだとoverrideが効かないので、Dependencyをclassにするようなアプローチが必要でしょうか? class ContentBasePresenter: AnyObject { struct Dependency { let wireframe: GithubReposSearchWireframe } }

class Content1Presenter: ContentBasePresenter { struct Dependency { let wireframe: GithubReposSearchWireframe let githubRepoRecommend: AnyUseCase<Void, [GithubRepoEntity], Never> } }

class Content2Presenter: ContentBasePresenter { struct Dependency { let wireframe: GithubReposSearchWireframe let githubRepoSort: AnyUseCase<[GithubRepoEntity], [GithubRepoEntity], Never> } }

jormungand2006 avatar Mar 26 '21 01:03 jormungand2006