🐤

【swiftメモ】MVCパターンのmodelについて

2024/05/10に公開

MVCパターンとは 〜model〜

ViewController,XIB,Modelを組み合わせて使用するアプリケーションアーキテクチャのことを言いう。
目的は、三つのコンポーネントに分割することで、コードの再利用性と保守性を向上させるために使われるはず

model(モデル)

model(モデル)の担当分野は
・アプリケーションのビジネスロジックを担当
・データの状態の管理とデータ操作に関するロジックをカプセル化
・データベース、API、ローカルファイルシステムからデータを取得、そのデータを加工してコントローラーに提供する。

データの状態の管理とデータ操作に関するロジックをカプセル化に分類される

//ユーザー情報を表すモデルの例
struct User {
  var id: Int
  ver name: String
  var email: String
}

・データベース、API、ローカルファイルシステムからデータを取得、そのデータを加工してコントローラーに提供する。

//APIからユーザーデータを取得するための例
class UserService {
//ユーザーデータをフェッチするメソッド
   func fetchUsers(completion: @escaping ([User]?) -> Void)
  let url = URL(string: "https://hogehogegegegegeg")!
//URLセッションを使ってデータを非同期で取得
  URLSession.shared.dataTask(with: url) {data, response, error in
       guard let data = data, error == nil else {
           print("Error fetching users:\(String(descridubg: error)"
           competion(nil)
           return
       }     
//ネットワークから取得したデータをUserの配列オブジェクトに変換しようとしている
  do {
     let users = try JSONDecoder().decode([User].self,from: data)
      completion(user)
      } catch {
       print("エラー"completion(nil)
        }
        }.resume()
      }

ビューコントローラーから使用する例

class ViewController: UIViewController {
//[Users]の配列としてusersを定義している
  var users: [User] = []
  override func viewDidLoad() {
     super.viewDidLoad()
// UserServiceのインスタンスを作成しuserServiceに代入している
     let userService = UserService()
//userServiceのfetchUsersを実行している
//[weak self]を使用することでクロージャがselfを弱参照する
//※弱参照することで、ViewControllerインスタンスが不要になった時に適切にメモリから解放される
     userService.fetchUsers {[weak self] fetchedUsers in
//クロージャの内容をメインスレッドで実行することを保証する
//※UIkitの更新はメインスレッドで行う必要があるため
     DispatchQueue.main.async {
//fetchUsersに値が含まれている場合ViewControllerのuser配列に代入
      if let fecheUsers = fetchUsers {
           self?.users = fechedUsers
              
              }
            }
        }
    }
}

Discussion