Dart 语言 MVVM 架构模式示例

Dart阿木 发布于 2025-06-19 12 次阅读


Dart 语言 MVVM 架构模式示例代码解析

MVVM(Model-View-ViewModel)是一种流行的软件架构模式,它将用户界面(UI)与业务逻辑分离,使得代码更加模块化、可测试和可维护。在 Dart 语言中,MVVM 架构模式同样适用,并且可以通过一些流行的框架如 Flutter 和 GetX 来实现。本文将围绕 Dart 语言 MVVM 架构模式,通过一个简单的示例来展示如何使用代码实现这一模式。

MVVM 架构模式简介

在 MVVM 架构模式中,应用程序分为三个主要部分:

1. Model(模型):负责数据管理和业务逻辑。

2. View(视图):负责显示数据和响应用户交互。

3. ViewModel(视图模型):作为视图和模型之间的桥梁,处理业务逻辑和用户界面状态。

这种模式的好处是:

- 分离关注点:视图和业务逻辑分离,使得它们可以独立开发。

- 易于测试:由于视图和业务逻辑分离,可以单独测试它们。

- 可重用性:视图模型可以跨多个视图重用。

示例项目结构

以下是一个简单的 Dart MVVM 项目结构示例:


my_mvvm_app/


├── lib/


│ ├── model/


│ │ └── user_model.dart


│ ├── view/


│ │ └── user_list_view.dart


│ ├── view_model/


│ │ └── user_list_view_model.dart


│ └── main.dart


└── test/


└── user_model_test.dart


实现步骤

1. 创建 Model

我们需要创建一个模型类来管理用户数据。

dart

// lib/model/user_model.dart


class UserModel {


String name;


int age;

UserModel({required this.name, required this.age});

// 可以添加更多方法来处理数据逻辑


}


2. 创建 ViewModel

接下来,我们创建一个视图模型类来处理业务逻辑和状态。

dart

// lib/view_model/user_list_view_model.dart


import 'package:flutter/material.dart';


import 'user_model.dart';

class UserListViewModel with ChangeNotifier {


List<UserModel> _users = [];

List<UserModel> get users => _users;

void fetchUsers() {


// 模拟从服务器获取数据


_users = [


UserModel(name: 'Alice', age: 25),


UserModel(name: 'Bob', age: 30),


UserModel(name: 'Charlie', age: 35),


];


notifyListeners();


}


}


3. 创建 View

现在,我们创建一个视图来显示用户列表。

dart

// lib/view/user_list_view.dart


import 'package:flutter/material.dart';


import 'package:get/get.dart';


import 'user_list_view_model.dart';

class UserListView extends StatelessWidget {


final UserListViewModel viewModel = Get.put(UserListViewModel());

@override


Widget build(BuildContext context) {


return Scaffold(


appBar: AppBar(title: Text('User List')),


body: Obx(() => ListView.builder(


itemCount: viewModel.users.length,


itemBuilder: (context, index) {


final user = viewModel.users[index];


return ListTile(


title: Text(user.name),


subtitle: Text('Age: ${user.age}'),


);


},


)),


floatingActionButton: FloatingActionButton(


onPressed: () => viewModel.fetchUsers(),


child: Icon(Icons.refresh),


),


);


}


}


4. 主函数

我们创建主函数来启动应用程序。

dart

// lib/main.dart


import 'package:flutter/material.dart';


import 'view/user_list_view.dart';

void main() {


runApp(MaterialApp(home: UserListView()));


}


测试

为了确保我们的 ViewModel 正确处理数据,我们可以编写一些单元测试。

dart

// test/user_model_test.dart


import 'package:test/test.dart';


import 'package:my_mvvm_app/lib/model/user_model.dart';

void main() {


test('UserModel should have name and age', () {


final user = UserModel(name: 'Test User', age: 40);


expect(user.name, 'Test User');


expect(user.age, 40);


});


}


总结

通过以上步骤,我们创建了一个简单的 Dart MVVM 应用程序。这个示例展示了如何将业务逻辑、数据管理和用户界面分离,使得代码更加模块化。在实际项目中,你可以根据需要添加更多的功能和复杂性。MVVM 架构模式在 Dart 语言中同样适用,并且可以带来许多好处。