패러다임: 안쪽 원은 바깥쪽을 의존하면 안된다.
바깥쪽 원은 안쪽 원을 알아야하고, 안쪽 원은 바깥쪽 원을 알 필요가 없다.
Interactor가 Presenter를 의존하게 되는 문제를 해결하기 위해 의존성 역전의 원칙을 쓴다.
방법은, Interactor가 자기가 호출할 메서드들을 인터페이스로 따로 선언을 하고 이 인터페이스를 Presenter Presenter가 구현하게 된다.
프로토콜들은 프로토콜로 레퍼런싱하고 있어서 프로토콜을 구현하고 있기만 하면 다른 것으로 교체가 가능하다.
라우터는 뷰 컨트롤러가 소유하고 있다. 새 화면으로 전환하기 위해서는 두가지가 필요하다. 새 화면을 띄워주는 것과, 데이터를 주입시켜주는 것. 이것이 라우터의 역할이다.
Interactor, Presenter는 거의 재사용성이 없다. 이유는 VIP 사이클을 타기 때문, 그렇기 때문에 공통 로직은 Worker로 따로 빼두는 것이 좋다.
DB를 다루는 부분, 즉 중요한 비즈니스 로직을 수행하지 않는 디테일 부분은 다른 클래스로 빼는 것이 좋다. 매니저가 Store에 의존하기 때문에 따로 만들어서 필요한 것만 쓰게 만드는 것이 좋다.
다른 클래스가 프로토콜을 구현하고 있다.
생성시에 구체적인 클리스를 주입받도록 한다.
하드코딩된 데이터 (Memory Store) 는 Contact Manager를 만들어서 써볼때 편하다. 유닛테스트를 작성할때 편하다.
ViewController에서는 출력만 하도록 하는 것이 좋다. (displayedNotes 만들어서 보내줌)
weak : VIP 간의 Retain Cycle을 방지 하기 위해 weak 사용
독립적으로 테스트가 가능하다.
장점
단점