[iOS] DesignPattern - MVC Pattern
12737 ワード
Design Pattern - MVC
Design Patternとは?
設計時によく使用されるテンプレート
先輩たちのタックル記録
コード外観
設計モデルには以下の利点があるため、開発者の先輩たちは設計モデルを使用し始めた.
단, 적절히 잘 사용하자
設計パターンを手段として、目的地があれば主客転倒する場合があります.*指定されたパターンについては、状況に応じて変更する必要がありますが、パターンの設計にこだわると、パターンを柔軟に適用したり変更したりすることはできません.そのため、100%守る必要はありませんが、明確に知れば、やるべきことはたくさんあります.
Design Patterns vs Architectures
アーキテクチャ:大図、ソフトウェア全図
ex)洋風建築、MVC建築
Design Pattern:このアーキテクチャの詳細なソリューション
ex)現在の状況に適応するために、西洋の建物内の不便な設計部分を修正する.
MVCとは?
Model(M)
モデルはアプリケーションのデータを担当します.データの論理を担当し、さらにデータの値の変更と管理を担当します.
Network Code:モデルには、ネットワーク要求、httpヘッダ、応答、エラーを処理するためのコードが含まれる場合があります.
Ex:
class Network {
static func loadJSONFile<T: Decodable>(named filename: String,
type: T.Type,
queue: DispatchQueue? = DispatchQueue.main,
simulateLoadDelay: Bool? = true,
delaySeconds: TimeInterval = 0.2,
completionHandler: @escaping (T?, NetworkError?) -> Void) {
// urlSession
// request
// jsonData parsing, date formatter
}
Persistence code:データベース、コアデータ、またはデバイスデータを格納するコード
Ex:
class Event {
//
// MARK: - Variables And Properties
//
var attendees: [Attendee] = []
var sessions: [Session] = []
//
// MARK: - Instance Methods
//
func attendees(for session: Session) -> [Attendee] {
return attendees.filter { (attendee) -> Bool in
session.attendeesBadges.contains(attendee.badgeNumber)
}
}
func sessions(for attendee: Attendee) -> [Session] {
return sessions.filter { (session) -> Bool in
session.attendeesBadges.contains(attendee.badgeNumber)
}
}
}
Parsing code:ネットワークから受信したjsonデータをiOSで使用できるデータに変換するコードも必要です.
Ex:
class Attendee: CustomStringConvertible, Decodable {
//
// MARK: - Variables And Properties
//
var age: UInt8
var badgeNumber: UInt8
var isFirstTimeAttending: Bool
var name: String
var nationality: String
var description: String {
return """
Name: \(name)
Nationality: \(nationality)
Age: \(age)
Badge Number: \(badgeNumber)
Attending For The First Time: \(isFirstTimeAttending ? "Yes" : "No")
"""
}
//
// MARK: - Initialization
//
init(age: UInt8, badgeNumber: UInt8, isFirstTimeAttending: Bool, name: String, nationality: String) {
self.age = age
self.badgeNumber = badgeNumber
self.isFirstTimeAttending = isFirstTimeAttending
self.name = name
self.nationality = nationality
}
}
Managers and abstraction layer/class:
View
ユーザに表示する画面(UI)を担当する.
Controller
モデルとビューの接続を担当します.
[注意]:
Model-View-Controller(MVC) in iOS - A Modern Approach
Model-View-Controller | Concepts in Objective-C Programming
Reference
この問題について([iOS] DesignPattern - MVC Pattern), 我々は、より多くの情報をここで見つけました https://velog.io/@inwoodev/iOS-DesignPattern-MVC-Patternテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol