2012-02-23 5 views
4

지난 몇 달 동안 Android로 개발 해왔다. 몇 가지 사실을 알게되었지만 바로 시작할 시간이라고 생각합니다. 이 경우 MVP/MVC 패턴은 UI를 처리하는 데 가장 적합한 패턴입니다.Android 앱용 MVP 패턴 정의 문제

많은 스레드와 예제를 읽었지만 여전히 안드로이드에 대한 경험이 부족하여 몇 가지 의구심이 있습니다.

일부 저자는 활동을 발표자/컨트롤러로 정의하고 다른 일부는보기로 정의합니다. 활동은 상태가 유지되고 사용자에게 레이아웃을 제공하는 자연스런 능력 때문에 활동이 발표자로 작동해야한다고 생각합니다. 틀렸어. 누군가가 이것을 분명히 밝힐 수 있기를 바란다. 내가 올바른 생각하면

, 다음 뷰는 내가 찾을 수 없습니다

... 레이아웃을 사용하는 다른 클래스를하고 난 길을 잃기 발표자 (활동)이이와 통신하기 위해 이벤트를 결합한다 방법은 뷰에서 확장되는 클래스를 적절하게 생성하고 레이아웃을 사용하여 이벤트를 바인딩하고 발표자와 통신 할 수있게합니다. 이 작업을 수행하는 유일한 방법은 Builder 객체를 사용하는 것이 었으며 빌더는 인포 더를 통해 뷰를 생성하고 이벤트를 바인딩합니다. 이 작동하지만 뷰 MVP 패턴을 파괴하는 어떤 인터페이스를 구현하지 않습니다. ... 정말 있다면 감사하겠습니다

내가 생각하는 다른 방법은, 안드로이드 뷰 객체에 대한 프록시로보기를 사용하는 것입니다,하지만 난이 그것을 처리하는 가장 좋은 방법이 있는지 확실하지 않습니다 누군가가 올바른 방향으로 나를 가리킬 수 있습니다.

긴 게시물을 보내 주셔서 감사합니다.

+0

지금까지 읽은 MVC/MVP 패턴 튜토리얼에 대한 링크를 제공 할 수 있습니까? – Jimmy

+0

James, 그 중 일부는 http://chicagoandroid.com/forum/topics/mvp-android-perspective 및 http://www.jamespeckham.com/blog/10-11-21/MVP_on_Android.aspx입니다. 웹에서 검색하는 동안 github의 일부 프로젝트 – varholl

답변

3

다른 컨텍스트에서 MVC에 대한 경험이 많았습니다. 안드로이드에서 꽤 많이 개발 한 후에는 전혀 직설적이지 않습니다.

컨트롤러 및보기 코드를 작업에 믹싱하게 될 가능성이 있습니다. 컨트롤러는 예, 그렇지만 메뉴, 대화 상자 등에 대한 사용자 상호 작용을 많이 처리합니다. 그리고 빠져 나오기 란 쉽지 않습니다.

Android 개발은 Django와 MVT, Model-View-Template을 떠올리게하는 다른 패러다임을 따르고 있다고 생각합니다.

그래서 안드로이드에서 MVC를 엄격하게 준수하지 말 것을 권합니다. 보기 및 컨트롤러 코드가 혼합 될 수 있지만 코드는 모듈 방식으로 유지 관리 할 수 ​​있습니다. 사용자 정의보기 또는 다른 전용 클래스는 이러한 측면에서 많은 도움이 될 수 있습니다.

그리고 내 생각에 학술 MVC를 찾는 대신 프레임 워크의 자연스러운 논리를 따라하면 많은 시간을 절약 할 수 있습니다.

+1

+1 마지막 문장. – CommonsWare

+0

MVP를 사용하여 실제 사례 (내 프로젝트 중 하나)를 사용한 개념 증명을 만들었습니다. 실제로는 멋지게 보이고 잘 작동하며 코드를 깨끗하게 유지합니다. 왜 그것이 단순하지 않은지 이해하지 못합니다. – varholl

+0

@ 그것은 정말로 곧장 앞으로 가지 않고, 날 동안 혼란스러워했다. –

1

스파게티 코드와 잠재적 인 메모리 누출이 신경 쓰이지 않는다면. 하나의 기본 레이아웃/뷰를 활동에 연결하는 것과 같이 할 수 있습니다. 그런 다음 기본 설정보기를 레이아웃에로드하십시오. 뷰의이 커스텀 클래스는 Activity를 호출하여 자신을 호출하는 액티비티를 다시 참조 할 수있게합니다. 보기를 전환하려면 현재보기를 다른보기로 바꿉니다.

원리는 단편과 동일하지만 내 방식은 복잡합니다.

그 후 나는 API & 조각을 고집합니다. 상황을 깔끔하게 유지하면서 MVC 다소 구조에 충분히 가깝습니다.

내 방식대로 시도해 볼 수 있습니다.하지 말아야 할 것을 많이 가르쳐 주므로 좋은 경험입니다. 만약 당신이 아직 알아 내지 못했을 경우를 대비하여 맵과 같은 것들도보기에서 작동하지 않을 것입니다.