2016 Staccato track3 Android를 더 잘 개발하려면? (MVP, MVVM, Clean Architecture)

Preview:

Citation preview

staccatoAndroid 를 더 잘 개발하려면 ?MVVM, MVP 패턴 그리고 그 너머…

TRACK 1

윤승용 BBBTechInc.

.. ..

핵심 페이지 3-4 페이지 , 드로잉 모듈 , 네트워크 모듈 포함

개발인원 4 명 , 런칭까지 16 개월 이상 소요

핵심 페이지 8-9 페이지 , 드로잉 모듈 , 이미지 프로세싱 모듈 , 네트워크 모듈 , Notification 모듈 등 포함

개발인원 3 명 , 런칭까지 12 개월 가량 소요

규모에서 차이가 많이 났지만 , 개발 기간이 더 적게 걸린 여러가지 이유 중가장 큰 이유는 Architecture 패턴을 도입했기 때문이라 생각함

규모가 큰 프로젝트를 진행할수록 아키텍쳐의 중요도는 높아짐

Good Architecture?

• Independent•Testable•Reusable•Expandable

• Independent•Testable•Reusable•Expandable

First Android

Activity

Event Handler Presentation Logic

Data Business Logic

Flow Control

SketchKit 프로젝트 알파버전 완성 당시에 Drawing Activity 라인은 1500 줄에 육박했음 ..

MVC Pattern

Model

View

Controller

Event

Data

Business Logic

Event Handler

Presentation Logic

Flow Control

Model

View Controller

Event

Data

Business Logic

Event HandlerPresentation Logic Flow Control

Activity

MVP Pattern

Model

View

Presenter

Event

Event Handler

Presentation Logic

Data

Business Logic

Flow Control

Model

View

Presenter

Event

Event Handler

Presentation Logic

Data

Business Logic

Flow Control

Activity

MVVM Pattern

Model

View

ViewModel

Event

Event Handler

Presentation Logic

Data

Business Logic

Flow Control

DataBinding

Model

View

ViewModel

Event

Event Handler

Presentation Logic

Data

Business Logic

Flow Control

ActivityDataBinding

Android DataBinding 라이브러리의 등장으로 MVVM 구현이 수월해졌음Android 2.1(API 레벨 7 이상 ) 까지 Android 플랫폼의 모든 이전 버전에서 사용할 수 있습니다 .

MVP vs MVVMOn Android

MVP

Pros• 코드 구조를 이해하기 쉽다• Test 가 상대적으로 더 쉽다• Activity/Fragment 의 역할이 명확하다

Cons• View 와 Presenter 간의 의존성이 높다• 작은 규모의 프로젝트에서는 명백한 OverEngineering

MVVM

Pros• 구현 속도가 빠르다• 코드 재사용성이 상대적으로 높다• View 와 ViewModel 간의 독립성을 보장

Cons• IDE 의 Data-Binding Library Support 가 더 필요함• 큰 규모로 갈수록 코드가 복잡해지기 쉬움

Clean Architrcture

Android Framework

Presenter

Model

View

External Framework

Repository Pattern

Server API

Database

Usecase

Android Framework

Presenter

Model

View

External Framework

Repository Pattern

Server API

Database

Usecase

파란 테두리 영역의 Independent 를 최대한 보장하는 것이 목표

http://martinfowler.com/eaaCatalog/repository.html 참고

http://jakewharton.github.io/butterknife/ 참고

https://www.youtube.com/watch?v=plK0zyRLIP8 참고

Pros• 코드의 가독성이 훨씬 뛰어남• 핵심 로직에 대한 Test 가 쉬움• 협업이 엄청 수월해짐

Cons• OverEngineering 의 향연• 초기 진입장벽이 높음

Conclusion

여전히 Silver Bullet 은 없지만

We will find a weapon. we always have.

yo0230@gmail.com윤승용 BBBTechInc.

Thank you