普段使っているクリーンアーキテクチャのUseCaseの作り方と使い方
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()でアプリ自体を落とす処理にしています。
Author And Source
この問題について(普段使っているクリーンアーキテクチャのUseCaseの作り方と使い方), 我々は、より多くの情報をここで見つけました https://qiita.com/YOSUKE8080/items/dfceb154b6ddb8756f3d著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .