[FastDev4Android 프레임 워 크 개발] Android MVP 개발 모델 상세 설명 (19)
http://blog.csdn.net/developer_jiangqq / article / details / 49613861 본 고 는 다음 과 같다. [강 청 의 블 로그]
(1). 머리말:
[좋 은 소식] 개인 사이트 가 이미 온라인 으로 운영 되 고 있 습 니 다. 뒤의 블 로그 와 기술 건어물 등 멋 진 글 이 동시에 업 데 이 트 될 것 입 니 다. 소장 에 관심 을 가 져 주 십시오.http://www.lcode.org
오늘 우리 의 프로젝트 는 계속 업데이트 되 고 있 습 니 다. 오늘 우 리 는 주로 MVP 개발 모델 과 구체 적 인 사례 를 설명 합 니 다.
FastDev4Android 프레임 워 크 항목 주소:https://github.com/jiangqqlmj/FastDev4Android
(2). 소개:
MVP (Model View Presenter) 모델 은 유명한 MVC (Model View Controller) 모델 의 진화 버 전 으로 현재 안 드 로 이 드 응용 개발 에서 점점 중요 해 지고 있다.처음에는 여러 종류의 인터페이스 코드 가 추가 되 어 더욱 선명 해 보 였 다.
MVP 모드 는 디 스 플레이 층 과 논리 층 을 분리 할 수 있 기 때문에 기능 인터페이스 가 어떻게 작 동 하고 기능 을 보 여 주 는 지 분 리 를 실현 할 수 있 고 MVP 모드 는 같은 논리 코드 와 서로 다른 디 스 플레이 인터페이스 를 이상 적 으로 실현 할 수 있다.그러나 MVP 는 구조 화 된 모델 이 아니 라 디 스 플레이 층 만 담당 할 뿐 언제든지 자신의 프로젝트 구조 에서 MVP 모델 을 사용 할 수 있다.(Android 프로젝트 개발 에 국한 되 지 않 음)
MVP 는 사실 MVC 모델 에서 진화 하여 생 긴 것 이기 때문에 우 리 는 먼저 유명한 MVC 모델 을 살 펴 보 자.
보기: 레이아웃 파일 에 대응 모델: 업무 논리 와 실체 모델 컨트롤 러: 컨트롤 러, Android 에서 Activity 에 대응
대응 하 는 대화 식 그림 은 다음 과 같다.
안 드 로 이 드 시스템 응용 개발 자 체 는 MVC 개발 모델 을 따 르 지만 View 층 과 Activity 를 자세히 살 펴 보 자. 구체 적 인 view 레이아웃 파일 의 데이터 바 인 딩 과 사건 처리 방법 코드 는 모두 Activity 에 남아 있 기 때문에 우 리 는 Activity 류 가 움 직 이지 않 으 면 적 으 면 900 줄, 많 으 면 수천 줄, 심지어 수천 줄 을 볼 수 있다.그렇다면 현재 업그레이드 버 전의 MVP 모델 은 어 떨 까?MVP 모드 가 도 입 됩 니 다. Presenter 층, 이 기종 은 View 층 과 Model 층 의 상호작용 을 복잡 하 게 완성 하면 구체 적 인 MVP 는 다음 과 같다.
View: View 는 일반적으로 Activity 에 의 해 이 루어 집 니 다. Presenter 의 인용 을 포함 합 니 다. View 가 할 일 은 인터페이스 가 호출 될 때마다 (예 를 들 어 단 추 를 클릭 한 후에) Presenter 를 호출 하 는 방법 입 니 다.
모델: 업무 논리 와 실체 모델 Presenter: 주로 View 와 Model 을 소통 하 는 다리 로 서 Model 층 에서 데 이 터 를 검색 한 후에 View 층 에 되 돌아 오지 만 MVC 구조 와 달리 View 층 과 의 상호작용 도 결정 할 수 있 기 때 문 입 니 다.
데이터 인 터 랙 션 그림 은 다음 과 같다.
위의 두 모델 의 상호작용 도 를 살 펴 보면 MVP 모델 이 더욱 뚜렷 하고 간단 하지 않 습 니까?
(3). MVC 와 MVP 의 차이 점:
다음 두 장의 대 비 를 구체 적 으로 살 펴 보면 구체 적 인 차 이 를 볼 수 있다.
위의 그림 을 살 펴 보면 MVP 모델 에서 View 와 Model 의 상호작용 은 Presenter 를 통 해 이 루어 진 다 는 것 을 알 수 있다. 이렇게 통일 적 으로 관리 하면 논리 가 더욱 뚜렷 해진 다.
(4). MVP 모드 예 설명:
4.1 구체 적 인 기능 수요 실현: 저 희 는 MVP 모델 로 사용자 로그 인 작업 을 실현 합 니 다.
4.2. 예 는 다음 과 같다.
4.3. 프로젝트 코드 프레임 워 크 는 다음 과 같다.
4.4. 코드 의 구체 적 인 실현:
4.4.1. Model 층: Bean 류 (Entity), PersonBean 류, 그리고 업무 논리 류 에서 로그 인 방법 이 있 으 며 로그 인 성공 상태 리 셋 인 터 페 이 스 를 다음 과 같이 입력 합 니 다.
packagecom.chinaztt.fda.entity;
/**
* :
* :FastDev4Android
* :com.chinaztt.fda.entity
* : on 15/10/27 14:13
* :[email protected]
* QQ: 781931404
* :
*/
public class PersonBean {
private String username;
private String password;
public PersonBean() {
}
public PersonBean(String username, Stringpassword) {
this.username = username;
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "PersonBean{" +
"username='" +username + '\'' +
", password='" +password + '\'' +
'}';
}
}
public interface IPersonBiz {
void login(String username,Stringpassword,LoginRequestCallBack valueCallBack);
}
packagecom.chinaztt.fda.biz.imp;
importcom.chinaztt.fda.biz.IPersonBiz;
importcom.chinaztt.fda.biz.LoginRequestCallBack;
importcom.chinaztt.fda.entity.PersonBean;
importcom.chinaztt.fda.utils.Log;
/**
* :
* :FastDev4Android
* :com.chinaztt.fda.biz.imp
* : on 15/10/27 16:33
* :[email protected]
* QQ: 781931404
* :
*/
public class PersonBizImp implements IPersonBiz{
private static final String TAG="PersonBizImp";
@Override
public void login(final String username,final String password, final LoginRequestCallBack valueCallBack) {
Log.d(TAG,"username:"+username+",password:"+password);
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(4500);
} catch (InterruptedExceptione) {
e.printStackTrace();
}
// , ,
if(username.equals("jiangqq")&&password.equals("12345")){
valueCallBack.loginSuccess(new PersonBean(username,password));
}else{
valueCallBack.loginFailed();
}
}
}).start();
}
}
packagecom.chinaztt.fda.biz;
importcom.chinaztt.fda.entity.PersonBean;
/**
* :
* :FastDev4Android
* :com.chinaztt.fda.biz
* : on 15/10/27 19:50
* :[email protected]
* QQ: 781931404
* :
*/
public interface LoginRequestCallBack {
//
void loginSuccess(PersonBean personBean);
//
void loginFailed();
}
4.4.2. View 층: Presenter 와 View 를 통 해 상호작용 을 해 야 합 니 다. 여 기 는 인터페이스 ILoginView 를 정의 해 야 합 니 다.
packagecom.chinaztt.fda.ui.view;
importcom.chinaztt.fda.entity.PersonBean;
/**
* :
* :FastDev4Android
* :com.chinaztt.fda.ui.view
* : on 15/10/27 16:35
* :[email protected]
* QQ: 781931404
* :
*/
public interface ILoginView {
//
String getUserName();
//
String getPassword();
void showSuccessInfo(PersonBeanpersonBean);
void showFailedInfo();
}
위의 인터페이스 가 생 긴 후에 우 리 는 우리 의 실현 류 Activity 를 써 야 한다. 매우 간단 하 다.
packagecom.chinaztt.fda.test;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.Button;
importandroid.widget.EditText;
importcom.chinaztt.fda.entity.PersonBean;
importcom.chinaztt.fda.presenter.LoginPresenter;
importcom.chinaztt.fda.ui.R;
importcom.chinaztt.fda.ui.base.BaseActivity;
importcom.chinaztt.fda.ui.view.ILoginView;
importcom.chinaztt.fda.utils.Log;
importorg.androidannotations.annotations.EActivity;
/**
* :MVP
* :FastDev4Android
* :com.chinaztt.fda.test
* : on 15/10/27 13:38
* :[email protected]
* QQ: 781931404
* :
*/
@EActivity
public class MVPTestActivity extends BaseActivity implements ILoginView{
private static final String TAG="MVPTestActivity";
private EditText ed_username;
private EditText ed_password;
private Button btn_login;
private LoginPresenter mLoginPresenter;
@Override
protected void onCreate(BundlesavedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mvp_test_layout);
ed_username=(EditText)this.findViewById(R.id.ed_username);
ed_password=(EditText)this.findViewById(R.id.ed_password);
btn_login=(Button)this.findViewById(R.id.btn_login);
mLoginPresenter=newLoginPresenter(this);
btn_login.setOnClickListener(newView.OnClickListener() {
@Override
public void onClick(View v) {
mLoginPresenter.loginSystem();
}
});
}
/**
*
* @return
*/
@Override
public String getUserName() {
returned_username.getText().toString().trim();
}
/**
*
* @return
*/
@Override
public String getPassword() {
returned_password.getText().toString().trim();
}
/**
*
* @param personBean
*/
@Override
public void showSuccessInfo(PersonBeanpersonBean) {
Log.d(TAG,"showSuccessInfo:"+personBean.toString());
showToastMsgShort(" :"+personBean.toString());
}
/**
*
*/
@Override
public void showFailedInfo() {
Log.d(TAG,"showFailedInfo...");
showToastMsgShort(" ...");
}
}
마지막 으로 상호작용 교량 이 하나 더 없습니다. Presenter:
4.4.3. Presenter 층: Model 과 View 간 의 상호작용 교량 으로서 본 사례 에서 로그 인 작업 을 한 다음 에 Model 업무 에서 로그 인 을 하고 마지막 으로 로그 인 결과 정 보 를 View 층 에 되 돌려 주 는 것 이 이렇게 간단 하 다.
packagecom.chinaztt.fda.presenter;
importandroid.os.Handler;
importcom.chinaztt.fda.biz.IPersonBiz;
importcom.chinaztt.fda.biz.LoginRequestCallBack;
importcom.chinaztt.fda.biz.imp.PersonBizImp;
importcom.chinaztt.fda.entity.PersonBean;
importcom.chinaztt.fda.ui.view.ILoginView;
importcom.chinaztt.fda.utils.Log;
/**
* : View Model(IPersonBiz)
* :FastDev4Android
* :com.chinaztt.fda.presenter
* : on 15/10/27 16:36
* :[email protected]
* QQ: 781931404
* :
*/
public class LoginPresenter {
private static final String TAG="LoginPresenter";
private ILoginView mLoginView;
private IPersonBiz mPersonBiz;
private Handler mHandler=new Handler();
public LoginPresenter(ILoginView view) {
mLoginView = view;
mPersonBiz = new PersonBizImp();
}
public void loginSystem(){
mPersonBiz.login(mLoginView.getUserName(), mLoginView.getPassword(), newLoginRequestCallBack() {
/**
*
* @param personBean
*/
@Override
public void loginSuccess(finalPersonBean personBean) {
Log.d(TAG," :" + personBean.toString());
mHandler.post(new Runnable() {
@Override
public void run() {
mLoginView.showSuccessInfo(personBean);
}
});
}
/**
*
*/
@Override
public void loginFailed() {
Log.d(TAG," ...");
mHandler.post(new Runnable() {
@Override
public void run() {
mLoginView.showFailedInfo();;
}
});
}
});
}
}
여기 서 우리 의 MVP 모드 의 예 는 대체적으로 완성 되 었 습 니 다. 위의 효과 시연 을 보면 OK 입 니 다.
저희 프로젝트 는 MVP Demo 의 예 를 통합 하도록 설정 되 어 있 습 니 다. Github 사이트 에 가서 clone 이나 다운로드 탐색 을 하 시 는 것 을 환영 합 니 다.https://github.com/jiangqqlmj/FastDev4Android 스타 와 포크 의 전체 오픈 소스 빠 른 개발 프레임 워 크 프로젝트 를 환영 합 니 다 ~
오리지널 을 존중 하고 전재 하 시 려 면: From Sky 주 청 (http://blog.csdn.net/developer_jiangqq) 권리 침 해 는 반드시 추궁 해 야 한다!
나의 구독 번호 (codedev 123) 를 주목 하고 매일 모 바 일 개발 기술 (Android / IOS), 프로젝트 관리 와 블 로그 글 을 공유 합 니 다!푸 시 글 을 즉시 가 져 옵 니 다!
나의 웨 이 보 를 주목 하면 더 많은 멋 진 내용 을 얻 을 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.