2017-11-22 8 views
1

내 프로젝트에서 MVVM을 사용합니다. 또한 전체 MVVM 외부에 분석 서비스가 있지만 분석 서비스, ViewModels 또는 ViewCotrollers에 대한 호출 위치를 모르겠습니다.Analytics MVVM

예 :

login.request{ result in 
    //Here?? 
    Firebase.registerUser() 
    viewController.finishLoginDelegate() 
} 

뷰 컨트롤러

func finishedLoginDelegate() { 
    //Or Here?? 
    Firebase.registerUser() 
} 

답변

2

이 오히려 매우 흥미로운 질문이다

VIEW 모델입니다. Analytics/MVVM을 다루는 블로그/문서를 읽지 않았습니다.

애널리틱스에서는 데이터가 중요 할 때가 있지만 여러 가지 뷰 라이프 사이클 단계에서 이벤트를 전송해야하는 경우가 있습니다. 대부분의 분석은 프로젝트 관리자가 필요로하며 일반적으로 사양에 포함시키지 않기 때문에 앱 또는 기능의 아키텍처를 생각할 때 분석을 어렵게 만듭니다.

MVVM을 따르는 경우에도 ViewControllers에 많은 분석 코드를 넣는 것에 대해 유죄입니다. 하지만 지금은 생각할 때, 순수하게 분석 관련 코드에 대해 (ViewModel과 같은) 분석 레이어를 포함시키는 것이 현명하다고 생각합니다. 더 나은 이름이 없다는 이유로 AnalyticsModel이라고 할 수 있습니다.

우리는 관련 프로토콜을 작성하고 ViewController/ViewModel의 데이터와 이벤트를이 객체로 전달할 수 있으며 Analytics API를 호출 할 수 있습니다 (현재 나 너무 많습니다). 모두들 그 가정으로 돌아갈 수 있습니다. 그들은 자신의 작은 세상에서 행복합니다.

AnalyticsModel을 작성하는 방법을 보여주기 위해 아래 코드를 작성했습니다.

protocol LoginAnalyticsModelProtocol { 
    func loginViewAppeared() 
    func loginButtonPressed(user:User) 
    func signUpButtonPressed() 
} 


class LoginAnalyticsModel:LoginAnalyticsModelProtocol { 
    func loginViewAppeared() { 
     //call analytics to send login view appeared case 
    } 
    func loginButtonPressed(user:User) { 
     // call analytics to send login view 
    } 
    func signUpButtonPressed() { 
     // call analytics to submit sign up button pressed event 
    } 
} 

class LoginVC:UIViewController { 
    var loginVM:LoginViewModel? 
    let loginAM:LoginAnalyticsModel = LoginAnalyticsModel() 

    override func viewDidAppear(_ animated: Bool) { 
     super.viewDidAppear(animated) 
     loginAM.loginViewAppeared() 
    } 

    @IBAction func loginButtonPressed(sender:UIButton) { 
     // Get user 
     // call anaytics 
     loginAM.loginButtonPressed(user) 
    } 
} 
+1

저는 항상 Analytics API에 싱글 톤 패턴을 개발하지만 프로토콜 애널리틱스 패턴을 매우 좋아합니다. 나는 이것을 찾았습니다 : https://medium.com/ios-os-x-development/architecting-an-analytics-layer-7cdacb5f74af 프로토콜과 싱글 톤 패턴을 사용하십시오. – Alvaro

+1

@Alvaro : 링크를 제공해 주셔서 감사합니다. 또한 프로젝트 중 하나에 싱글 톤을 사용하는 게시자 - 구독자 접근 방식을 사용했습니다. 두 가지 다른 분석이 여러 가지 이유로 앱에 포함되어 있으며 서로 다른 데이터 및 이벤트가 필요한 경우가 있기 때문에 언젠가는 제한적입니다. –

+0

@ PunnetSharma 어쨌든이 내 질문에 대답하지 않습니다 .... 귀하의 예제에서, 당신은 ViewController에 Analytics 서비스를 포함하지만 우리는 ViewModel에 포함시킬 수 있습니까? 나는 그렇게 생각한다 ... – Alvaro