[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 에 대응
   대응 하 는 대화 식 그림 은 다음 과 같다.
  
【FastDev4Android框架开发】Android MVP开发模式详解(十九)_第1张图片
   안 드 로 이 드 시스템 응용 개발 자 체 는 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 층 과 의 상호작용 도 결정 할 수 있 기 때 문 입 니 다.
 데이터 인 터 랙 션 그림 은 다음 과 같다.
【FastDev4Android框架开发】Android MVP开发模式详解(十九)_第2张图片
위의 두 모델 의 상호작용 도 를 살 펴 보면 MVP 모델 이 더욱 뚜렷 하고 간단 하지 않 습 니까?
(3). MVC 와 MVP 의 차이 점:   
     다음 두 장의 대 비 를 구체 적 으로 살 펴 보면 구체 적 인 차 이 를 볼 수 있다.
【FastDev4Android框架开发】Android MVP开发模式详解(十九)_第3张图片
위의 그림 을 살 펴 보면 MVP 모델 에서 View 와 Model 의 상호작용 은 Presenter 를 통 해 이 루어 진 다 는 것 을 알 수 있다. 이렇게 통일 적 으로 관리 하면 논리 가 더욱 뚜렷 해진 다.
(4). MVP 모드 예 설명:   
      4.1 구체 적 인 기능 수요 실현: 저 희 는 MVP 모델 로 사용자 로그 인 작업 을 실현 합 니 다.
      4.2. 예 는 다음 과 같다. 
           
    4.3. 프로젝트 코드 프레임 워 크 는 다음 과 같다.

     
【FastDev4Android框架开发】Android MVP开发模式详解(十九)_第4张图片
     
    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), 프로젝트 관리 와 블 로그 글 을 공유 합 니 다!푸 시 글 을 즉시 가 져 옵 니 다!
【FastDev4Android框架开发】Android MVP开发模式详解(十九)_第5张图片
나의 웨 이 보 를 주목 하면 더 많은 멋 진 내용 을 얻 을 수 있다.
【FastDev4Android框架开发】Android MVP开发模式详解(十九)_第6张图片

좋은 웹페이지 즐겨찾기