Balbas Code

Model vs Manager: アーキテクチャとロジックの理解

公開日: 2023-09-30 11:55:26

ソフトウェア開発における命名は非常に重要です。適切な名前はコードの読み手にとって、そのクラスや関数がどのような役割を持っているのかを明確に伝えます。今回の記事では、特に「Model」と「Manager」の違いや、ビジネスロジックとプレゼンテーションロジックの違いについて解説します。

ファイル名を命名するときに違いについてきちんと理解して、何でもかんでもModelと命名しないことが目的です。


 


Model


Modelは、アプリケーションのデータ構造やビジネスロジックを表します。これはアプリケーションの核となるルールや手続き、データの変換・処理方法など、ビジネス要件を実現するためのロジックを指します。例えば、銀行アプリでの口座間の資金移動や利息の計算は、ビジネスロジックとしてModelに含まれることが多いです。


Modelのサンプルコード
以下のコードは、銀行の口座を表す簡単なモデルです。このモデルには、口座残高を増減させるためのビジネスロジックが含まれています。


// 銀行の口座を表すモデル
struct BankAccount {
var balance: Double // 口座残高

// お金を預ける操作
mutating func deposit(amount: Double) {
balance += amount
}

// お金を引き出す操作。引き出し金額が残高を超える場合は引き出せない
mutating func withdraw(amount: Double) -> Bool {
if balance >= amount {
balance -= amount
return true
} else {
return false
}
}
}




Manager


一方、Managerはある種のリソースやプロセスを管理するクラスやサービスを指します。これはプレゼンテーションロジックやサービス呼び出しのロジックなど、UI/UXに関連する操作やアプリケーションの外部サービスとのインタラクションを管理するものを指します。例として、広告のロードや表示のような動作はManagerが担当することが多いです。


Managerのサンプルコード
以下のコードは、広告のロードや表示を管理する簡単なマネージャーの例です。広告のロード成功時や失敗時に応じた処理やコールバックを管理します。


import GoogleMobileAds

// 広告のロードや表示を管理するクラス
class AdManager {
var interstitialAd: GADInterstitialAd? // インタースティシャル広告オブジェクト

// 指定したAdUnitIDで広告をロードする関数
func loadAd(adUnitID: String, completion: @escaping (Bool) -> Void) {
let request = GADRequest()
GADInterstitialAd.load(withAdUnitID: adUnitID, request: request) { [weak self] ad, error in
if let error = error {
print("Loading ad failed with error: \(error.localizedDescription)")
completion(false)
return
}
self?.interstitialAd = ad
completion(true)
}
}

// インタースティシャル広告を表示する関数
func showAd(from viewController: UIViewController) {
if let ad = interstitialAd {
ad.present(fromRootViewController: viewController)
} else {
print("Ad is not ready yet")
}
}
}




ビジネスロジック vs プレゼンテーションロジック


前述したように、ビジネスロジックはアプリケーションの核となるルールや手続きを指します。一方、プレゼンテーションロジックは、ユーザーインターフェースの動作や振る舞い、アニメーション、トランジションなど、ユーザーとのインタラクションを管理するロジックを指します。


 


 


まとめ


ソフトウェア設計において、クラスや関数の命名はコードの意図を明確に伝える重要な要素です。ModelやManagerのような名称を適切に使用することで、そのコードが担当する役割や機能を他の開発者に明確に伝えることができます。