programing

Android 애플리케이션 아키텍처-제안 된 모델은 무엇입니까?

nasanasas 2020. 12. 9. 08:19
반응형

Android 애플리케이션 아키텍처-제안 된 모델은 무엇입니까?


같은 방식으로 웹 또는 데스크톱 앱에는 3 개 또는 n 개의 계층 (예 : UI, 비즈니스, 데이터)이있을 수 있습니다. Android 애플리케이션에 대해 제안 된 구조는 무엇입니까? 클래스를 그룹화하는 방법, 어떤 레이어가 있습니까?

저는 Android dev (수신 알림에 응답해야하는 인터넷 기반 앱)를 막 시작하고 있으며 제가 목표로하는 구조에 대한 실제 느낌이 없습니다. 제안 감사합니다.


IMHO, Android는 MVC 패턴을 "원한다"지만보기와 컨트롤러는 일반적으로 활동에서 실제로 결합됩니다.

단위 테스트를 더 어렵게 만들고 단일 책임 원칙 을 준수하기 어렵습니다 .

여기제시된 정말 멋진 Android 아키텍처를 찾았 습니다 . 아이디어가있을 수 있습니다. 모든 것이 느슨하게 결합되어 있으므로 테스트 및 편집이 훨씬 쉽습니다.

분명히 다른 가능성 (MVP 패턴 ( Model View Presenter )과 여기에 Android의 MVP에 대한 답변 ) 이 많이있을 것이라고 확신 하지만 여전히 살펴 봐야합니다.


저는 전체 단위 테스트와 계층화 된 아키텍처가 일반적이고 잘 작동하는 서버 측 배경에서 9 개월 동안 Android에서 작업 해 왔습니다.

많은 시행 착오를 거쳐 Model View PresenterModel View Controller가 아닌 패턴을 사용하는 것이 좋습니다 .

내가 찾은 큰 문제는 Activities/ Fragments당신이 통제 할 수없는 수명주기가 있고 예기치 않은 문제로 이어질 수 있다는 것입니다.

예를 들어, 우리의 메인 안드로이드 앱은 태블릿에서 가로 모드로 사용되기를 원합니다. 이 작업은 OnCreateView()또는 에서 수행합니다 OnCreate().

Nexus 7에서 기본보기는 세로이므로 세로 모드에서 활동을 시작하면 코드가 가로로 이동하고 Android는 궁극적으로 activity클래스를 3 번 생성합니다 .

우리는 네트워크 요청을 연결했고이 onCreate경우 3 번 발생합니다.

물론 중복 호출을 찾는 논리를 추가 할 수 있지만 제 생각에는 UI를 비즈니스 논리에서 분리하는 것이 구조적으로 더 좋습니다.

내 권장 사항은 팩토리 패턴을 사용하여 활동에서 발표자를 생성하지만 팩토리가 동일한 인스턴스 만 반환하도록하는 것입니다. 발표자는 네트워크 요청을 수행하고 중복을 찾고 캐시 된 결과와 일반 비즈니스 로직을 반환하는 로직을 포함 할 수 있습니다.

네트워크 호출 결과가 반환되면 활동 (이벤트 onResume()등록 및 등록 취소 onPause())이 등록 된 Otto와 같은 버스에 게시 하거나 활동에 의해 구현 된 콜백 인터페이스가에서 마지막 활동으로 업데이트되었는지 확인합니다. 발표자.

이런 식 presenter으로 아래쪽의 코드 는 단위 테스트가 가능하며 비정상적인 UI 레이어 테스트에 의존하지 않습니다.


Android의 작업,보기 및 활동은 Android UI로 작업하는 방식으로 구워지고 모델보기 컨트롤러와 구조적으로 유사한 (동일한 제품군에서) 모델보기보기 모델 패턴의 구현입니다.

내 지식을 최대한 활용하기 위해이 모델에서 벗어날 방법은 없습니다. 가능할 수도 있지만 기존 모델의 모든 이점을 잃을 수 있으며 작동하도록 자체 UI 레이어를 다시 작성해야합니다.

다음에서 MVC를 찾을 수 있습니다.

  • 해상도 / 하드웨어 등에 따라 다양한 XML 파일에 사용자 인터페이스정의합니다 .
  • 로케일 등에 따라 다양한 XML 파일에 리소스정의합니다 .
  • SQLite에 데이터를 저장 하거나 / assets / 폴더에 사용자 지정 데이터를 저장하고 리소스 및 자산에 대해 자세히 알아보세요.
  • ListActivity , TabActivity같은 클래스를 확장 하고 인플레이터로 XML 파일을 사용합니다.
  • 모델에 대해 원하는만큼 클래스를 생성하고 구조 역할을하는 자체 패키지를 가질 수 있습니다.
  • 많은 Utils 가 이미 작성되었습니다. DatabaseUtils, Html,

당신이 따를 수있는 단일 MVC 패턴은 없습니다. MVC는 데이터와 뷰를 섞어서는 안된다고 조금만 언급합니다. 예를 들어 뷰는 데이터를 보관하는 책임이 있거나 데이터를 처리하는 클래스가 뷰에 직접 영향을줍니다.

그럼에도 불구하고 Android가 클래스와 리소스를 처리하는 방식에서는 때때로 MVC 패턴을 따라야하는 경우도 있습니다. 내 의견에서 더 복잡한 것은 때때로 견해를 책임지는 활동이지만 그럼에도 불구하고 동시에 통제자 역할을하는 활동입니다.

xml 파일에서보기와 레이아웃을 정의하는 경우 res 폴더에서 리소스를로드하고 코드에서이 항목을 혼합하지 않으려면 어쨌든 MVC 패턴을 따릅니다.


MVP는 대부분의 사람들은 다음과 같습니다 최신 architecute입니다 여기가 작은 문서입니다 으로 삼촌 밥의 깨끗한 아키텍처는 "아키텍처가 의도하지 프레임 워크 소개이다"라고 말한다

이 비디오를 시청하십시오 .


다음은 잘 문서화 된 소스 코드 가있는 Android 아키텍처 청사진위한 전용 프로젝트입니다 . 그들 모두는 몇 가지 비틀림이있는 MVP 패턴을 기반으로합니다. 또한 코드 라인, 테스트 가능성, 학습 비용, 데이터 복잡성 증가에 대한 지원을 기반으로 다양한 솔루션 비교확인하십시오 . 특별히 개발 된 앱과 청사진이 가장 적합한 컨텍스트 (시장 출시 시간, 개발자, 향후 계획 등)에 따라 다릅니다.

참고 URL : https://stackoverflow.com/questions/3320534/android-application-architecture-what-is-the-suggested-model

반응형