MVP approach - Android



我正在尝试在示例android项目中实现MVP架构。

您是否可以推荐我如何分解此代码,以在MVP上采用更好的方法。

我可以创建一个接口以具有setContactinfo()方法,但无法想到任何其他方法。

这是列表视图的列表项的详细信息。我从另一个活动中获取数据。

谢谢您的建议。

  package com.salesi.coding;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import java.util.ArrayList;
import butterknife.Bind;
import butterknife.ButterKnife;
public class ContactDetails extends AppCompatActivity {
    @Bind(R.id.tvTitle) protected TextView mTitle;
    @Bind(R.id.tvFirstName) protected TextView mFirstName;
    @Bind(R.id.tvLastName) protected TextView mLastName;
    @Bind(R.id.tvJobTitle) protected TextView mJobTitle;
    @Bind(R.id.tvPhoneNUmber) protected TextView mPhoneNUmber;
    @Bind(R.id.tvEmail) protected TextView mEmail;
    @Bind(R.id.tvHobbies) protected TextView mHobbies;
    @Bind(R.id.tvAddressLine1) protected TextView mAddressLine1;
    Intent contactIntent;
    Bundle contactBundle;
    String title, firstName, lastName,jobTitle, phoneNumber, email, address, hobbies;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_contact_details);
        ButterKnife.bind(this);
        //Get the Bundle data.
        contactIntent = getIntent();
        contactBundle = contactIntent.getExtras();
        hobbies = contactBundle.getString("hobbies");
        title = contactBundle.getString("title");
        firstName = contactBundle.getString("firstName");
        lastName = contactBundle.getString("lastName");
        jobTitle = contactBundle.getString("jobTitle");
        phoneNumber = contactBundle.getString("phoneNumber");
        email = contactBundle.getString("email");
        address = contactBundle.getString("address");
        setContactInfo();
    }
    private void setContactInfo(){
        mTitle.setText(title);
        mFirstName.setText(firstName);
        mLastName.setText(lastName);
        mJobTitle.setText(jobTitle);
        mPhoneNUmber.setText(phoneNumber);
        mEmail.setText(email);
        mHobbies.setText(hobbies.toString());
        mAddressLine1.setText(address.toString());
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu, menu);
        return true;
    }
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case R.id.exitApp:
                finish();
                break;
            default:
        }
        return true;
    }
}

因此,在MVP真正受欢迎之前,Android项目的编写方式过于重(做太多工作)。活动将负责渲染UI,处理触摸事件,进行API呼叫,对上述API呼叫等回调等。

MVP受到流行的原因之一是因为它将关注点的分离引入了Android代码中。基本上,在MVP中,活动/片段(视图)仅对视图相关的方面,而诸如进行API呼叫和处理回调之类的事情被删除并移至主持人。

您上面提供的代码实际上很好,并且不需要主持人。

这是您何时使用MVP的情况:

联系方式来自您的后端服务器。ContactDetailsactivity将告知ContactDetailspresenter,需要详细信息。ContactDetailspresenter将向后端服务器提出请求。一旦ContactDetailsPresenter从服务器获得成功的响应,它将告知ContactDetailsactivity,详细信息已被获取,并将提供必要的详细信息来访问ContactDetailsactivity。ContactDetailSactivity将使用详细信息更新UI。

对于MVP(模型视图 - 列表)架构模式,您应该拥有:模型,视图,演示者

首先,您有模型部分,并且您的操作正确完成了,即XML文件,

second 一个视图,它是将属性绑定到您在上面的代码中所做的模型部分的地方

第三您应该检索的位置的模式,因此您可以做的是将方法放在上面的方法中,然后将方法放在同类中,并调用方法

最新更新