Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

프로젝트 매니저 [STEP 2] Hemg #313

Open
wants to merge 26 commits into
base: ic_9_hemg22
Choose a base branch
from

Conversation

hemg2
Copy link
Member

@hemg2 hemg2 commented Oct 5, 2023

STEP2

안녕하세요. @July911(줄라이)~
개인사정도 생기면서, 연휴도 겹치고해서 정말 너무 늦게 PR을 보내게 되었습니다.
잘한지도 의문이 들면서도 우선을 보내고 피드백을 받고싶어서 진행하게 되었습니다.
확인 부탁드립니다.
감사합니다!


고민 했던점

UseCaseViewModel 분리에 대해서
제가 테이블뷰 3개를 통하여 프로젝트를 진행하고있어서
VC에서 반복되는것들이 많이 있었습니다.
그래서 이부분에 대한 로직을 UseCase로 옮겨서 진행하게 되었습니다.
그렇게 진행을 하다가 이제 ViewModel을 만들어 로직을 구현해야하는 과정에서 UseCaseViewModel 차이가 뭐지 라는 의문을 가지게 되었고 데이터 바인딩? 굳이? 이것이 정답일까? 여기까지 생각하게 되었습니다.
그래서 저는 item 관련 로직을 UseCase, View 관련 로직을 ViewModel 로 이동하여 분리를 진행했습니다.

이렇게 진행하다보니 지금 제가 로직을 구현한것들을 의문을 가지게 되면서 잘 되었는지도 의문을 갖게 되었습니다. 이부분 피드백 부탁드립니다!

해결하지못한점

protocol AddTodoDelegate: AnyObject {
    func didAddTodoItem(title: String, body: String, date: Date)
    func didEditTodoItem(title: String, body: String, date: Date, index: Int)
}

현시점에서 델리겟 패턴 -> 컴바인으로 변경하고싶었는데 진행하지를 못했습니다. 컴바인에 대한 공부가 부족한거 같습니다ㅠㅠ

isa = PBXGroup;
children = (
63CC815F2AC6AA5B00E6355F /* ReuseIdentifier.swift */,
63CC816D2AC6D8CA00E6355F /* CellTitleNamespace.swift */,
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ReuseIdentifier 도 Namespace 인가요 ?


import UIKit

protocol AddTodoDelegate: AnyObject {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AnyObject 는 무엇일까요 ?

}()

weak var delegate: AddTodoDelegate?
private var todoItems: ProjectManager?
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

todoItems: ProjectManager?
조금 어색하게 읽히는거같은데요. 어떤 의도인지 말씀부탁드립니다.

let doneButton = UIBarButtonItem(title: "Done", style: .done, target: self, action: #selector(doneButton))
navigationItem.rightBarButtonItem = doneButton

if isNew == true {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

optional도 아닌데 == 이 필요할까요 ?
이름이 충분이 bool 을 커버할거 같습니다.

dismiss(animated: true)
}

@objc private func editButton() {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

눌렸을때 메서드명이 조금 이상하네요.

}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let listCell = tableView.dequeueReusableCell(withIdentifier: ReuseIdentifier.listTitleCell, for: indexPath) as? ListTitleCell else { return UITableViewCell() }
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

가독성이 너무 좋지 않습니다.
여러개로 나눠보는것도 방법이겠네요 !


import UIKit

final class MainViewModel {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

지금 필요할까요 ... ? 있어서 얻은 장점은 무엇인가요 ?
UI부분을 제외하면 Test코드를 작성할수 있나요 ?

func didAddTodoItem(title: String, body: String, date: Date) {
dataManager.addTodoItem(title: title, body: body, date: date)
let newTodoItem = ProjectManager(title: title, body: body, date: date)
useCase.todoItems.append(newTodoItem)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기서
DataManager가 TodoItem을 Add하고,
UseCase도 append를 해주네요. 조금 구조가 이상한 것 같습니다 !

}

final class DataManager: DataManagerProtocol {
private var todoItems = [ProjectManager]()
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

DataManager안에 todoItems 가 들어있네요.
이런 경우라면 TodoItemManager가 맞지 않나요 ?

var doneItems: [ProjectManager] { get set }
func moveToDoing(_ item: ProjectManager)
func moveToDone(_ item: ProjectManager)
func moveToTodo(_ item: ProjectManager)
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Enum으로

enum TitleItem {
case todo
case doing
case done
}
이렇게 만드신걸 봤는데, 다르게 설계할 수는 없을까요 ? enum을 활용해서요.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants