Skip to content

Commit

Permalink
refactor: Create FetchDataUseCase to modify architecture
Browse files Browse the repository at this point in the history
  • Loading branch information
BMO5 committed Apr 26, 2021
1 parent 875099c commit bce0c3f
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 65 deletions.
21 changes: 5 additions & 16 deletions frontend/SideDish/SideDish.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
objectVersion = 50;
objectVersion = 51;
objects = {

/* Begin PBXBuildFile section */
Expand All @@ -30,6 +30,7 @@
CE8E2E4526313B48007EEEBB /* MainDiffableDataSource.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE8E2E4426313B48007EEEBB /* MainDiffableDataSource.swift */; };
CE8E2E4B26313C19007EEEBB /* MenuHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE8E2E4926313C19007EEEBB /* MenuHeaderView.swift */; };
CE8E2E4C26313C19007EEEBB /* MenuHeaderView.xib in Resources */ = {isa = PBXBuildFile; fileRef = CE8E2E4A26313C19007EEEBB /* MenuHeaderView.xib */; };
CEAE6F302636AAFD00720625 /* FetchDataUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEAE6F2F2636AAFD00720625 /* FetchDataUseCase.swift */; };
D913214002A3F533F01AF848 /* Pods_SideDishTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2BA6E291323BD92D963428EF /* Pods_SideDishTests.framework */; };
/* End PBXBuildFile section */

Expand Down Expand Up @@ -86,6 +87,7 @@
CE8E2E4426313B48007EEEBB /* MainDiffableDataSource.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MainDiffableDataSource.swift; sourceTree = "<group>"; };
CE8E2E4926313C19007EEEBB /* MenuHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenuHeaderView.swift; sourceTree = "<group>"; };
CE8E2E4A26313C19007EEEBB /* MenuHeaderView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MenuHeaderView.xib; sourceTree = "<group>"; };
CEAE6F2F2636AAFD00720625 /* FetchDataUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchDataUseCase.swift; sourceTree = "<group>"; };
F27206AA084B5CBF57CB7CC7 /* Pods-SideDishTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SideDishTests.debug.xcconfig"; path = "Target Support Files/Pods-SideDishTests/Pods-SideDishTests.debug.xcconfig"; sourceTree = "<group>"; };
/* End PBXFileReference section */

Expand Down Expand Up @@ -233,25 +235,12 @@
path = SideDishUITests;
sourceTree = "<group>";
};
C47942AE6054F8A507A45C1E /* Pods */ = {
isa = PBXGroup;
children = (
7170100C838AA642224E5DCE /* Pods-SideDish.debug.xcconfig */,
7FF21EAAD09AD50BD023F72C /* Pods-SideDish.release.xcconfig */,
FD74F0D1D82A2F83DAB7E818 /* Pods-SideDish-SideDishUITests.debug.xcconfig */,
C3F90F1D121C49A909B1B179 /* Pods-SideDish-SideDishUITests.release.xcconfig */,
B171412F1D324870D55DF000 /* Pods-SideDishTests.debug.xcconfig */,
E91D83273D3CC72A6884B988 /* Pods-SideDishTests.release.xcconfig */,
);
name = Pods;
path = Pods;
sourceTree = "<group>";
};
CE5905FC26327DD40085F570 /* ViewModel */ = {
isa = PBXGroup;
children = (
CE5905FD26327DFE0085F570 /* MenuViewModel.swift */,
CE29EB422632A0B700221658 /* MenusViewModel.swift */,
CEAE6F2F2636AAFD00720625 /* FetchDataUseCase.swift */,
);
path = ViewModel;
sourceTree = "<group>";
Expand All @@ -266,7 +255,6 @@
F27206AA084B5CBF57CB7CC7 /* Pods-SideDishTests.debug.xcconfig */,
9D4386F5E85715EE23862BF7 /* Pods-SideDishTests.release.xcconfig */,
);
name = Pods;
path = Pods;
sourceTree = "<group>";
};
Expand Down Expand Up @@ -515,6 +503,7 @@
BD930B5C262D6F5800906633 /* ViewController.swift in Sources */,
BD930B58262D6F5800906633 /* AppDelegate.swift in Sources */,
BD090658262E9B450094421D /* MenuCell.swift in Sources */,
CEAE6F302636AAFD00720625 /* FetchDataUseCase.swift in Sources */,
CE29EB432632A0B700221658 /* MenusViewModel.swift in Sources */,
CE8E2E4026313B3C007EEEBB /* JSONModel.swift in Sources */,
CE8E2E4B26313C19007EEEBB /* MenuHeaderView.swift in Sources */,
Expand Down
7 changes: 4 additions & 3 deletions frontend/SideDish/SideDish/View/MainDiffableDataSource.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,11 @@ class MainDiffableDataSource {
self.dataSource.apply(snapshot, animatingDifferences: true)
}

func applySnapshot(menu:[MenuViewModel], section: sectionTitle) {
func applySnapshot(main: [MenuViewModel], soup: [MenuViewModel], side: [MenuViewModel]) {
var snapshot = self.dataSource.snapshot()
snapshot.appendItems(menu, toSection: section)

snapshot.appendItems(main, toSection: .main)
snapshot.appendItems(soup, toSection: .soup)
snapshot.appendItems(side, toSection: .side)
self.dataSource.apply(snapshot, animatingDifferences: true)
}

Expand Down
49 changes: 4 additions & 45 deletions frontend/SideDish/SideDish/ViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,16 +12,13 @@ class ViewController: UIViewController {
@IBOutlet weak var sideDishCollectionView: UICollectionView!

private var dataSource = MainDiffableDataSource()
private var menus = Menus()
private var menusViewModel = MenusViewModel()

override func viewDidLoad() {
super.viewDidLoad()

NotificationCenter.default.addObserver(self, selector: #selector(sendMenuList), name: MenusViewModel.changeMenu, object: menusViewModel)
configureCollectionView()
loadMain()
loadSoup()
loadSide()
menusViewModel.fetchData()
}

private func configureCollectionView() {
Expand All @@ -34,45 +31,7 @@ class ViewController: UIViewController {
self.dataSource.setupDataSource(collectionView: self.sideDishCollectionView)
}

private func loadMain() {
DataTaskManager.sendRequest(url: .main, completion: { (result) in
switch result {
case .success(let data):
self.menus.add(menuList: data.body, section: .main)
self.menusViewModel.add(menuList: self.menus.giveMenu(section: .main), section: .main)
self.putData(menu: self.menusViewModel.giveMenus(section: .main), section: .main)
case.failure(let error):
print(error.localizedDescription)
}
})
}

private func loadSoup() {
DataTaskManager.sendRequest(url: .soup, completion: { (result) in
switch result {
case .success(let data):
self.menus.add(menuList: data.body, section: .soup)
self.menusViewModel.add(menuList: self.menus.giveMenu(section: .soup), section: .soup)
self.putData(menu: self.menusViewModel.giveMenus(section: .soup), section: .soup) case.failure(let error):
print(error.localizedDescription)
}
})
}

private func loadSide() {
DataTaskManager.sendRequest(url: .side, completion: { (result) in
switch result {
case .success(let data):
self.menus.add(menuList: data.body, section: .side)
self.menusViewModel.add(menuList: self.menus.giveMenu(section: .side), section: .side)
self.putData(menu: self.menusViewModel.giveMenus(section: .side), section: .side) case.failure(let error):
print(error.localizedDescription)
}
})
}

private func putData(menu: [MenuViewModel]?, section: MainDiffableDataSource.sectionTitle) {
guard let menu = menu else { return }
self.dataSource.applySnapshot(menu: menu, section: section)
@objc private func sendMenuList() {
self.dataSource.applySnapshot(main: menusViewModel.giveMenus(section: .main), soup: menusViewModel.giveMenus(section: .soup), side: menusViewModel.giveMenus(section: .side))
}
}
20 changes: 20 additions & 0 deletions frontend/SideDish/SideDish/ViewModel/FetchDataUseCase.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@

import Foundation

protocol FetchMenuUseCase {
func loadMenu(of: DataTaskManager.Url ,closure: @escaping ([Menu]) -> (Void))
}

class FetchDataUseCase: FetchMenuUseCase {
func loadMenu(of url: DataTaskManager.Url, closure: @escaping ([Menu]) -> (Void)) {
DataTaskManager.sendRequest(url: url, completion: { (result) in
switch result {
case .success(let data):
closure(data.body)
case.failure(let error):
// 실패시 persistence 내에 있는 데이터 반환하기
print(error.localizedDescription)
}
})
}
}
22 changes: 21 additions & 1 deletion frontend/SideDish/SideDish/ViewModel/MenusViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,25 @@ class MenusViewModel {
private var mainViewModel: [MenuViewModel]
private var soupViewModel: [MenuViewModel]
private var sideViewModel: [MenuViewModel]
private var fetchMenuUseCase: FetchMenuUseCase

init() {
self.mainViewModel = []
self.soupViewModel = []
self.sideViewModel = []
self.fetchMenuUseCase = FetchDataUseCase()
}

func fetchData() {
self.fetchMenuUseCase.loadMenu(of: .main) { menuList in
self.add(menuList: menuList, section: .main)
}
self.fetchMenuUseCase.loadMenu(of: .soup) { menuList in
self.add(menuList: menuList, section: .soup)
}
self.fetchMenuUseCase.loadMenu(of: .side) { menuList in
self.add(menuList: menuList, section: .side)
}
}

func add(menuList: [Menu], section:MainDiffableDataSource.sectionTitle) {
Expand All @@ -22,9 +36,11 @@ class MenusViewModel {
case .side:
self.sideViewModel = viewModelList
}

NotificationCenter.default.post(name: MenusViewModel.changeMenu, object: self)
}

func giveMenus(section: MainDiffableDataSource.sectionTitle) -> [MenuViewModel]? {
func giveMenus(section: MainDiffableDataSource.sectionTitle) -> [MenuViewModel] {
switch section {
case .main:
return mainViewModel
Expand Down Expand Up @@ -54,3 +70,7 @@ class MenusViewModel {
}
}
}

extension MenusViewModel {
static let changeMenu = Notification.Name("changeMenu")
}

0 comments on commit bce0c3f

Please sign in to comment.