MVPMVVM - 列表过滤,谁负责

swift

1个回答

写回答

laa0327

2025-06-20 08:40

+ 关注

Java
Java

MVP/MVVM - 列表过滤,谁负责?

在软件开发中,列表过滤是一个常见的需求。当我们需要根据特定条件筛选和显示列表中的项时,我们需要一个机制来处理这个过程。在MVP (Model-View-Presenter) 和MVVM (Model-View-ViewModel) 这两种架构模式中,都有不同的方式来处理列表过滤。但是,问题是,到底是谁负责处理列表过滤?让我们来探讨一下。

MVP 中的列表过滤

在MVP 架构中,列表过滤通常由Presenter负责处理。Presenter是连接Model和View的中间人,它负责处理用户的交互和业务逻辑。当用户在View上进行列表过滤时,View会将这个请求传递给Presenter,然后Presenter会根据过滤条件从Model中获取符合条件的数据,并将结果传递回View进行显示。

下面是一个简单的MVP架构中的列表过滤的示例代码:

Java

// Model

public class DataModel {

private List<String> dataList;

public DataModel() {

dataList = new ArrayList<>();

dataList.add("Apple");

dataList.add("Banana");

dataList.add("Orange");

dataList.add("Grapes");

}

public List<String> getDataList() {

return dataList;

}

}

// View

public interface DataView {

void showDataList(List<String> dataList);

}

// Presenter

public class DataPresenter {

private DataView view;

private DataModel model;

public DataPresenter(DataView view) {

this.view = view;

model = new DataModel();

}

public void filterDataList(String keyword) {

List<String> filteredList = new ArrayList<>();

List<String> dataList = model.getDataList();

for (String data : dataList) {

if (data.toLowerCase().contAIns(keyword.toLowerCase())) {

filteredList.add(data);

}

}

view.showDataList(filteredList);

}

}

// Usage

public class MAIn {

public static void mAIn(String[] args) {

DataView view = new DataView() {

@Override

public void showDataList(List<String> dataList) {

for (String data : dataList) {

System.out.println(data);

}

}

};

DataPresenter presenter = new DataPresenter(view);

presenter.filterDataList("a");

}

}

在上面的示例中,当用户输入过滤的关键字时,View会调用Presenter的filterDataList方法,并将关键字作为参数传递给Presenter。然后Presenter会根据关键字过滤Model中的数据,并将结果通过View的showDataList方法显示出来。这样,MVP架构中的列表过滤就完成了。

MVVM 中的列表过滤

与MVP不同,MVVM架构中的列表过滤通常由ViewModel负责处理。ViewModel是连接View和Model的中间人,它负责处理用户的交互和数据操作。当用户在View上进行列表过滤时,View会将过滤条件传递给ViewModel,然后ViewModel会根据过滤条件从Model中获取符合条件的数据,并将结果通过数据绑定机制传递给View进行显示。

下面是一个简单的MVVM架构中的列表过滤的示例代码:

Java

// Model

public class DataModel {

private List<String> dataList;

public DataModel() {

dataList = new ArrayList<>();

dataList.add("Apple");

dataList.add("Banana");

dataList.add("Orange");

dataList.add("Grapes");

}

public List<String> getDataList() {

return dataList;

}

}

// ViewModel

public class DataViewModel {

private DataModel model;

private MutableLiveData<List<String>> filteredDataList;

public DataViewModel() {

model = new DataModel();

filteredDataList = new MutableLiveData<>();

}

public LiveData<List<String>> getFilteredDataList() {

return filteredDataList;

}

public void filterDataList(String keyword) {

List<String> filteredList = new ArrayList<>();

List<String> dataList = model.getDataList();

for (String data : dataList) {

if (data.toLowerCase().contAIns(keyword.toLowerCase())) {

filteredList.add(data);

}

}

filteredDataList.setValue(filteredList);

}

}

// View

public class DataViewActivity extends AppCompatActivity {

private DataViewModel viewModel;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setcontentView(R.layout.activity_data_view);

viewModel = new ViewModelProvider(this).get(DataViewModel.class);

EditText filterEditText = findViewById(R.id.filterEditText);

RecyclerView dataRecyclerView = findViewById(R.id.dataRecyclerView);

// 设置RecyclerView的Adapter和LayoutManager

filterEditText.addTextChangedListener(new TextWatcher() {

@Override

public void beforeTextChanged(CharSequence s, int start, int count, int after) {

}

@Override

public void onTextChanged(CharSequence s, int start, int before, int count) {

viewModel.filterDataList(s.toString());

}

@Override

public void afterTextChanged(Editable s) {

}

});

viewModel.getFilteredDataList().observe(this, new Observer<List<String>>() {

@Override

public void onChanged(List<String> dataList) {

// 更新RecyclerView的数据

}

});

}

}

在上面的示例中,当用户输入过滤的关键字时,View会将关键字传递给ViewModel的filterDataList方法。然后ViewModel会根据关键字过滤Model中的数据,并通过filteredDataList的setValue方法更新数据。View通过观察(filteredDataList)来自动更新显示的列表。

无论是MVP还是MVVM架构,列表过滤都是一个常见的需求。在MVP中,列表过滤由Presenter负责处理,而在MVVM中,列表过滤由ViewModel负责处理。MVP和MVVM都提供了一种可靠的方法来处理列表过滤,具体的选择取决于个人或团队的偏好和项目的需求。无论选择哪种架构,列表过滤都可以通过合适的设计模式和数据绑定机制来实现。

希望本文对您理解MVP和MVVM架构中的列表过滤有所帮助,并提供了一些示例代码来展示如何处理这一需求。无论您选择哪种架构,重要的是保持代码的清晰、可维护和可扩展性。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号