Last active
July 29, 2018 03:39
-
-
Save alfian0/077968e8e64eb84bb5faf909340c5d68 to your computer and use it in GitHub Desktop.
Simple Clean Arcitecture
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
struct CreateOrderRequest { | |
// MARK: | |
// Interactor | |
// Get or fetch Model Response From API | |
struct CreateOrderResponse { | |
// MARK: | |
// ViewModel ~> Responsibility to parse Interactor response to Model View | |
struct CreateOrderViewModel { | |
let orderNumber: Int | |
let orderName: String | |
let orderCount: Int | |
} | |
var result: CreateOrderViewModel? | |
private init(data: [String: Any]) { | |
result = parse(data: data) | |
} | |
private func parse(data: [String: Any]) -> CreateOrderViewModel? { | |
guard let orderNumber = data["order_number"] as? Int, | |
let orderName = data["order_name"] as? String, | |
let orderCount = data["order_count"] as? Int else { return nil } | |
return CreateOrderViewModel(orderNumber: orderNumber, orderName: orderName, orderCount: orderCount) | |
} | |
} | |
var response: CreateOrderResponse? | |
private init() { | |
response = fetch() | |
} | |
private func fetch() -> CreateOrderResponse { | |
let data: [String: Any] = [ | |
"order_number": 123456, | |
"order_name": "Adidas", | |
"order_count": 1 | |
] | |
return CreateOrderResponse(data: data) | |
} | |
} | |
let orderRequest = CreateOrderRequest() | |
print(orderRequest.response?.result?.orderName) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment