1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

普段使っているクリーンアーキテクチャのUseCaseの作り方と使い方

Last updated at Posted at 2021-03-12

Templateつくりました!
https://github.com/yosuke1985/Clean-MVVM-Generator/blob/main/Clean%20MVVM/UseCase.xctemplate/___FILEBASENAME___UseCase.swift

例えばuserに紐付いたTodoを取得するGetTodoListUseCaseがあるとして、

テスタブルな設計にするためにもInputとOutputをプロトコルで定義する。
Inputは userID:String
Outputは GetTodoListUseCaseResult で定義する。
Outputには、成功パターンと失敗パターンを明記する。

import UIKit
import RxCocoa
import RxSwift

enum GetTodoListUseCaseResult {
    case success(element: [Todo])
    case failure(errorType: ErrorType)
    
    enum ErrorType {
        case someError
    }
}

protocol GetTodoListUseCaseInjectable {
    var getTodoListUseCaseImpl: GetTodoListUseCase { get }
}

extension GetTodoListUseCaseInjectable {
    var getTodoListUseCaseImpl: GetTodoListUseCase {
        return GetTodoListUseCaseImpl()
    }
}

protocol GetTodoListUseCase {
    func getTodoList(userID: String) -> Single<GetTodoListUseCaseResult>
}

class GetTodoListUseCaseImpl: GetTodoListUseCase {
    let bag = DisposeBag()
    
    func getTodoList(userID: String) -> Single<GetTodoListUseCaseResult> {
         // ここでレポジトリ経由でタスクをゲットする
        return Single<GetTodoListUseCaseResult>.never()
    }
}

上記のUseCaseのoutputはGetTodoListUseCaseResultですので、

GetTodoListUseCaseResult.getTodoList(userID: "yosuke8080")
           .subscribe( onNext: { getTodoListUseCaseResult in

             switch GetTodoListUseCaseResult {
              case .success(let todoList):
                 // ここで取得したtodoListでゴニョゴニョする
              case .failure(let error):
                // 准正常系
                
              }
          }, onError: { error in
              // 異常系
              fatalError(error.localizedDescription)
         })
          .disposed(by: bag)

ここでは、異常系に入る場合はfatalError()でアプリ自体を落とす処理にしています。

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?