【Swift】自動生成されたモデルをドメインモデルに入れ替えるメリット
こんにちはお疲れ様です。
今日はTIPSというかメモというかそんな感じです。
サーバー側にSwaggerを利用したAPIレスポンスモデルをYAMLで作成してもらって、それをフロント側でOpenAPI Generatorでレスポンスを自動生成する環境がありました。
それのアプリ側のデバッグTIPSになります。
生成されたモデルは直利用せずドメインモデルに入れ替える
自動生成されたモデルをそのまま利用してもいいですがアプリ側でドメインモデルに入れ替えることで、Swagger値変更時にコケて差分が見つけやすくなります。
例えば以下のようなモデルが自動生成できたとします。
public struct ResUserGet: Codable {
public enum UserType {
case bronze = "bronze"
case silver = "silver"
case gold = "gold"
}
public var id: Int
public var name: String
public var userType: UserType
public init(id: Int, name: String, userType: UserType) {
self.id = id
self.name = name
self.userType = userType
}
}
この場合、Moyaやら何やら取得したJSONをデコードしてこのモデルを利用することもできますが、ドメインモデル変換を挟んでやります。
struct UserEntity {
enum UserType: String {
case bronze
case silver
case gold
}
var id: Int
var name: String
var userType: UserType
}
こういうモデルに入れ替える。
入れ替えるときは以下のようなTranslatorを用意するといいかも。
うちではRepositoryに変換処理を書き込んでいます。
extension ResUserGet {
func translate() -> UserEntity {
return .init(id: id,
name: name,
userType: userType)
}
}
extension UserEntity.UserType {
init?(from value: ResUserGet.UserType) {
switch value {
case .bronze: self = .bronze
case .silver: self = .silver
case .gold: self = .gold
}
}
}
こうすることでパラメータの変更がされた時にパースでこけるので、見落としがなくなります。
以上メモ。
ディスカッション
コメント一覧
まだ、コメントがありません