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

[Team-11] 새로운 이슈 만들기 기능 추가, DIContainer 에 대한 고찰 #243

Open
wants to merge 69 commits into
base: team-11
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
69 commits
Select commit Hold shift + click to select a range
aea9a63
[Jinsujin/issue-tracker#20] Feat: 새 이슈 생성 시 선택 옵션을 Option enum으로 분리
bibi6666667 Jun 27, 2022
ed0be9c
[Jinsujin/issue-tracker#20] Feat: 새 이슈 생성 시 저장소 선택 화면 구현
bibi6666667 Jun 27, 2022
3611e1a
[Jinsujin/issue-tracker#20] Fix: issue list api
Jinsujin Jun 27, 2022
3c6694a
[Jinsujin/issue-tracker#20] Feat: Repository 엔티티 추가 및 repository 요청 코…
bibi6666667 Jun 27, 2022
7753233
Merge branch 'feat#20' of https://github.com/Jinsujin/issue-tracker i…
Jinsujin Jun 27, 2022
60069e4
[Jinsujin/issue-tracker#20] Feat: OptionSelectViewController 생성을 Cont…
bibi6666667 Jun 27, 2022
fb53b06
[Jinsujin/issue-tracker#20] Refactor: Container에서 OptionSelectViewCon…
bibi6666667 Jun 28, 2022
a17829e
[Jinsujin/issue-tracker#20] Feat: 새 이슈 생성 시 API 요청하여 Repository 불러오기 …
bibi6666667 Jun 28, 2022
d14a0d7
[Jinsujin/issue-tracker#20] Feat: 이슈 만들기 버튼과 API 연결
Jinsujin Jun 28, 2022
09d8f7e
[Jinsujin/issue-tracker#20] Feat: 새 이슈 생성 기능 구현
bibi6666667 Jun 29, 2022
b425f41
[Jinsujin/issue-tracker#20] chore: 불필요한 코드 및 주석 제거
bibi6666667 Jun 29, 2022
547ac43
[Jinsujin/issue-tracker#24] Ref: 옵션 선택하는 화면에서 API 를 호출하도록 수정
Jinsujin Jun 29, 2022
d494374
[Jinsujin/issue-tracker#24] Ref: 선택한 아이템을 이전화면으로 넘길때 리스트에서 option 을 찾…
Jinsujin Jun 29, 2022
43aefc6
[Jinsujin/issue-tracker#24] Feat: 로그인 후, 첫 화면을 repo list 로 변경
Jinsujin Jun 29, 2022
e24536b
[Jinsujin/issue-tracker#24] Feat: 이슈 목록을 불러올때, issue tab 에서 생성한 이슈만 가…
Jinsujin Jun 29, 2022
c200084
Ref: Container 가 token 을 주입받도록 수정
Jinsujin Jun 30, 2022
a30d281
Ref: Container 에서 ViewController 인스턴스 생성시, token 을 주입하도록 함
Jinsujin Jun 30, 2022
4ec1a9f
Feat: 레포지토리 리스트 화면에서의 Model 생성과 연결
Jinsujin Jun 30, 2022
48e7ceb
Ref: navigation 의 largetitle 설정
Jinsujin Jun 30, 2022
94700a7
[Jinsujin/issue-tracker] Feat: NewIssueModel 계층 추가
bibi6666667 Jun 30, 2022
f4b1f07
[Jinsujin/issue-tracker] chore: 불필요한 코드 및 주석 삭제
bibi6666667 Jun 30, 2022
3200b4f
[Jinsujin/issue-tracker] OptionSelectModel 계층 추가
bibi6666667 Jun 30, 2022
bc006c4
[Jinsujin/issue-tracker] Feat: 새 이슈 생성 시 Label 붙이는 기능 추가
bibi6666667 Jun 30, 2022
5e8b77a
Feat: 선택한 옵션이 무엇인지에 따라서 다른데이터를 불러오도록 수정
Jinsujin Jun 30, 2022
d2675b2
Feat: assignees 를 불러오는 API작업중
Jinsujin Jun 30, 2022
b398019
[Jinsujin/issue-tracker] Feat: 새 이슈 생성 시 해당 저장소에 대한 Assignee 조회 구현
bibi6666667 Jul 1, 2022
b86ec49
[Jinsujin/issue-tracker] Feat: 제목, 내용, label, milestone, assignee를 포함…
bibi6666667 Jul 1, 2022
1ddb879
[Jinsujin/issue-tracker] 불필요한 코드, 주석 삭제 및 파일 분리
bibi6666667 Jul 1, 2022
d5c4855
Ref: GithubUserDefaults 의 static 제거
Jinsujin Jul 8, 2022
709b78b
Ref: Repos 바인딩을 Container 에 하도록 변경
Jinsujin Jul 8, 2022
cf39c51
Doc: readme.md 업뎃
Jinsujin Jul 8, 2022
94f6cb2
[Jinsujin/issue-tracker] #28 Container의 의존성을 관리하는 ContainerEnvironmen…
bibi6666667 Jul 19, 2022
2cf9ed0
[Jinsujin/issue-tracker #28] ReposModel의 의존성인 IssueService.requestRep…
bibi6666667 Jul 19, 2022
c5bca22
Revert "[Jinsujin/issue-tracker #28] ReposModel의 의존성인 IssueService.re…
bibi6666667 Jul 20, 2022
f1dc0ce
[Jinsujin/issue-tracker #28] ReposModel의 의존성인 IssueService.requestRep…
bibi6666667 Jul 19, 2022
d791820
[Jinsujin/issue-tracker] #28 IssueModel이 service 전체를 받지 않고, service에서…
bibi6666667 Jul 21, 2022
aaf1c2f
[Jinsujin/issue-tracker] #28 Feat: NewIssueModel에 service 전체 대신, 필요한 …
bibi6666667 Jul 21, 2022
7e9b7ba
[Jinsujin/issue-tracker] #28 Feat: OptionSelect에서 사용하는 service의 메서드들을…
bibi6666667 Jul 21, 2022
3dce5a4
[Jinsujin/issue-tracker] #28 Refactor: LoginVC와 LoginModel 분리 및 OAuth…
bibi6666667 Jul 22, 2022
2aa67de
[Jinsujin/issue-tracker] #28 Refactor: IssueVC 생성 시 필요한 작업을 viewDidLo…
bibi6666667 Jul 25, 2022
da4fa97
[Jinsujin/issue-tracker] #28 Refactor: OptionSelectVC 생성 시 필요한 설정 부분을…
bibi6666667 Jul 25, 2022
4d2672b
Merge branch 'develop' into bibi/refactor
bibi6666667 Jul 25, 2022
a54d231
Merge pull request #29 from Jinsujin/bibi/refactor
bibi6666667 Aug 9, 2022
7eb9168
Feat : AppDelegate를 위한 코디네이터인 AppCoordinator 생성 및 실행 시점 rootVC 판단 로직 분리
bibi6666667 Aug 9, 2022
50e1cb4
Feat: Container에 register, resolve 패턴 적용해 Login/Repos 화면 전환
bibi6666667 Aug 11, 2022
c43f970
Feat: ReposVC에 코디네이터와 컨테이너 적용
bibi6666667 Aug 16, 2022
7bf8c02
Feat: ReposViewController를 보여줄 때 ReposCoordinator를 사용하도록 변경
bibi6666667 Aug 19, 2022
1065a7b
Feat: IssueViewController 화면 흐름을 관리하는 IssueCoordinator 추가 #28
bibi6666667 Aug 31, 2022
93724ce
Feat: NewIssueViewController를 관리하는 NewIssueCoordinator 추가 및 새 이슈 생성에 …
bibi6666667 Aug 31, 2022
300373e
Feat: 모든 뷰컨에 coordinator 프로퍼티 추가 및 NewIssue 생성 시 뒤로가기 동작 구현 #28
bibi6666667 Aug 31, 2022
7170c83
Feat: OptionSelectViewController를 관리하는 OptionSelectCoordinator 추가 #28
bibi6666667 Aug 31, 2022
9f80da2
Feat : coordinator생성 시 register한 뒤, childCoordinators 관리할 때 활용 #28
bibi6666667 Sep 2, 2022
e3a03eb
Feat : 이슈생성, 옵션선택 후 coordinator에서 이전 화면으로 되돌아가며 reload호출 (동작하지 않음) #28
bibi6666667 Sep 2, 2022
c94cb85
Feat : OptionSelectVC를 coordinator로 연결 - 옵션마다 다른 화면 생성 #28
bibi6666667 Sep 2, 2022
6f7ac28
Merge branch 'bibi/refactor' of https://github.com/Jinsujin/issue-tra…
bibi6666667 Sep 2, 2022
7e2c599
Feat : 이슈 생성 요청과 이슈목록 요청 사이에 딜레이 추가, 받아온 이슈에 새로 생성한 이슈가 없다면 재요청 #28
bibi6666667 Sep 5, 2022
cf7c960
Chore : 미사용 메서드와 주석 삭제 #28
bibi6666667 Sep 5, 2022
00867fb
Chore : 불필요한 주석 및 코드 삭제 #28
bibi6666667 Sep 6, 2022
5865265
refactor: ViewController deinit이 호출되지 않는 문제 디버깅 #28
bibi6666667 Sep 15, 2022
75a66ca
refactor: 변수명을 적절하게 수정 #28
bibi6666667 Sep 15, 2022
264ed97
refactor: 불필요한 self 키워드 삭제 #28
bibi6666667 Sep 15, 2022
d37d8c9
refactor: 이슈 생성 요청 이후 새 이슈가 생성되었는지 확인한 다음 이슈 목록으로 되돌아가도록 변경 (뷰 미완성) #28
bibi6666667 Sep 15, 2022
55b3b87
refactor : 새 이슈 생성 -> 이슈 조회 흐름 수정. #28
bibi6666667 Sep 16, 2022
0d2db84
debug : 로그인 직후 앱으로 돌아왔을 때 저장소 목록이 나오지 않는 현상 디버깅(해결) #28
bibi6666667 Sep 21, 2022
6e2fcec
refactor : Container에서 뷰컨트롤러와 관련 코디네이터를 묶어 관리하고 삭제 작업도 처리하도록 변경 #28
bibi6666667 Sep 22, 2022
448b9dd
refactor : 뷰컨트롤러와 관련 코디네이터 이름을 담은 ViewControllerCoordinator 열거형을 사용해 …
bibi6666667 Sep 22, 2022
f44007b
chore : 불필요한 주석 및 print문 삭제 #28
bibi6666667 Sep 22, 2022
c5d1b0b
debug : IssueService 초기화를 위해 토큰 기본값을 넘기는 대신 옵셔널로 타입 수정 #28
bibi6666667 Sep 26, 2022
13517eb
Merge pull request #31 from Jinsujin/bibi/refactor
bibi6666667 Sep 30, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions IssueTracker/IssueTracker.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -311,11 +311,11 @@
983E66C4285B204600C9B975 /* Storage */,
985CAB45285C19D0005E709D /* Extension */,
985CAB4A28603AD3005E709D /* GitHub */,
983E66CA285B2AD300C9B975 /* Entity */,
985CAB5128606898005E709D /* Login */,
9844C191286C802000D0CFC9 /* Repos */,
983E66CA285B2AD300C9B975 /* Entity */,
000B92BF286D67C6009EB2D8 /* NewIssue */,
981BD438285B123A00DDDE64 /* Issue */,
000B92BF286D67C6009EB2D8 /* NewIssue */,
000B92C5286D6F85009EB2D8 /* OptionSelect */,
988510D528572B8700CC2DA9 /* AppDelegate.swift */,
988510DE28572B8900CC2DA9 /* Assets.xcassets */,
Expand Down
2 changes: 1 addition & 1 deletion IssueTracker/IssueTracker/Container.swift
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class Container {
let viewController = IssueViewController(model: model, repo: selectedRepo) // Issue -> Issues
return viewController
case .newIssue(let repo):
let model = NewIssueModel(service: service)
let model = NewIssueModel(environment: .init(createIssue: environment.issueService.createIssue(title:repo:content:label:milestone:assignee:completion:)))

Choose a reason for hiding this comment

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

클로저 주입할때, 놓치기 쉬운 부분입니다.
해당 Environment를 생서할 때, 보이지 않게 self.environment를 주입한 시점입니다.
즉 self를 강하게 캡쳐시켰기 때문에 리테인 사이클이 발생합니다.

return NewIssueViewController(repo: repo, model: model)
case .optionSelect(let option, let repo):
let model = OptionSelectModel(service: service)
Expand Down
12 changes: 8 additions & 4 deletions IssueTracker/IssueTracker/NewIssue/Model/NewIssueModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,19 @@ import Foundation

class NewIssueModel {

private let service: IssueService
private let environment: NewIssueModelEnvironment

init(service: IssueService) {
self.service = service
init(environment: NewIssueModelEnvironment) {
self.environment = environment
}

func createIssue(title: String, repo: Repository, content: String, label: Label?, milestone: Milestone?, assignee: Assignee?, completion: @escaping (Bool) -> Void) {
service.createIssue(title: title, repo: repo, content: content, label: label, milestone: milestone, assignee: assignee) { boolResult in
environment.createIssue(title, repo, content, label, milestone, assignee) { boolResult in
completion(boolResult)
}
}
}

struct NewIssueModelEnvironment {
let createIssue: (String, Repository, String, Label?, Milestone?, Assignee?, @escaping (Bool) -> Void) -> Void

Choose a reason for hiding this comment

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

타입이 길어지기 시작하면 typealias를 사용하셔서 의미를 부여하면 좋을 거 같습니다.

Choose a reason for hiding this comment

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

아니면 의미가 있는 모델로 묶는 방법도 있습니다.

}
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,9 @@ class NewIssueViewController: UIViewController {
required convenience init?(coder: NSCoder) {

let owner = Owner(login: "")
let service = IssueService(token: "")
let model = NewIssueModel(service: service)
let modelEnvironment = NewIssueModelEnvironment(createIssue: { _, _, _, _, _, _, _ in
})
let model = NewIssueModel(environment: modelEnvironment)
self.init(repo: Repository(name: "",
owner: owner),
model: model)
Expand Down
7 changes: 0 additions & 7 deletions IssueTracker/IssueTracker/Repos/ReposViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,6 @@ class ReposViewController: UIViewController {
setupViews()
// 뷰컨 자신에 대한 셋팅 코드는 뷰컨을 만드는 Container에서 해준다 (추후 Coordinator로 분리)
self.view.backgroundColor = .white
// self.title = "Repos"
// model.fetchViewData()
// model.updated = { [weak self] repos in
// DispatchQueue.main.async {
// self?.tableView.reloadData()
// }
// }
}

func reloadTableView() {
Expand Down