Android mvvm - 每个 CRUD 操作都应该有自己的 ViewModel 吗?
创始人
2024-08-14 18:30:08
0

在Android中,MVVM(Model-View-ViewModel)是一种架构模式,它将应用程序分为三个主要组件:模型(Model)、视图(View)和视图模型(ViewModel)。

当涉及到CRUD(创建、读取、更新和删除)操作时,通常建议为每个操作创建一个独立的ViewModel。这样做的好处是可以将相应操作的业务逻辑和状态隔离,使代码更加清晰易懂,并且可以更好地进行单元测试。

下面是一个示例,展示了如何在Android中使用MVVM架构来处理CRUD操作。

首先,我们创建一个模型类(Model)来表示数据实体:

public class User {
    private int id;
    private String name;
    // 其他属性和方法...

    // 省略构造函数和Getter/Setter方法...
}

然后,我们创建一个视图模型类(ViewModel)来处理与用户操作相关的业务逻辑和状态:

public class UserViewModel extends ViewModel {
    private UserRepository userRepository;
    private MutableLiveData> userList;

    public UserViewModel() {
        userRepository = new UserRepository();
        userList = new MutableLiveData<>();
    }

    public LiveData> getUsers() {
        return userList;
    }

    public void loadUsers() {
        List users = userRepository.getUsers();
        userList.postValue(users);
    }

    public void addUser(User user) {
        userRepository.addUser(user);
        loadUsers();
    }

    public void updateUser(User user) {
        userRepository.updateUser(user);
        loadUsers();
    }

    public void deleteUser(User user) {
        userRepository.deleteUser(user);
        loadUsers();
    }
}

在这个视图模型类中,我们使用了一个UserRepository来处理实际的数据操作。UserRepository可以是一个单例类,它封装了与数据源的交互,例如数据库或网络请求等。

最后,我们在视图(View)中使用这个视图模型类来实现用户界面:

public class MainActivity extends AppCompatActivity {
    private UserViewModel userViewModel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        userViewModel = new ViewModelProvider(this).get(UserViewModel.class);

        RecyclerView recyclerView = findViewById(R.id.recyclerView);
        UserAdapter userAdapter = new UserAdapter();

        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(userAdapter);

        userViewModel.getUsers().observe(this, new Observer>() {
            @Override
            public void onChanged(List users) {
                userAdapter.setUsers(users);
            }
        });

        userViewModel.loadUsers();
    }

    // 其他方法...
}

在这个示例中,我们使用了一个RecyclerView来展示用户列表,当用户数据发生变化时,通过观察者模式更新UI。

通过使用MVVM架构,我们可以将CRUD操作的业务逻辑和状态从视图中分离出来,并在视图模型中进行处理。这样可以使代码更加模块化和可测试,并且提高了代码的可维护性。

相关内容

热门资讯

透明规律!老友广东辅助工具下载... 【亲,老友广东辅助工具下载地址 这款游戏可以开挂的,确实是有挂的,很多玩家在这款老友广东辅助工具下载...
透明讲解!微信小程序财神破解版... 微信小程序财神破解版是一款专注玩家量身打造的游戏记牌类型软件,在微信小程序财神破解版这款游戏中我们可...
透视规律!小闲川南辅助,wep... 小闲川南辅助开挂教程视频分享装挂详细步骤在当今的网络游戏中,小闲川南辅助作为一种经典的娱乐方式,吸引...
透视模拟器!决战卡五星游戏辅助... 决战卡五星游戏辅助是一款可以让一直输的玩家,快速成为一个“必胜”的ai辅助神器,有需要的用户可以加我...
透明有挂!四川乐易麻将辅助脚本... 大家好,今天小编来为大家解答四川乐易麻将辅助脚本这个问题咨询软件客服可以免费测试直接加微信(1367...
透明插件!边锋干瞪眼房租胡,德... 透明插件!边锋干瞪眼房租胡,德州真人透视脚本-原本有挂开挂辅助挂;无需打开直接搜索微信(136704...
透视黑科技!茶馆儿破解教程,w... 茶馆儿破解教程开挂教程视频分享装挂详细步骤在当今的网络游戏中,茶馆儿破解教程作为一种经典的娱乐方式,...
透视脚本!决战卡五星辅助软件哪... 透视脚本!决战卡五星辅助软件哪个好用,xpoker辅助神器-本来有挂开挂辅助插件1、下载安装好决战卡...
透视智能ai!来来拼十辅助免费... 来来拼十辅助免费辅助开挂教程视频分享装挂详细步骤在当今的网络游戏中,来来拼十辅助免费辅助作为一种经典...
透明科技!淘宝买顺欣茶楼辅助软... 您好:这款淘宝买顺欣茶楼辅助软件靠谱吗游戏是可以开挂的,确实是有挂的,很多玩家在这款淘宝买顺欣茶楼辅...