(三二)HarmonyOS Design 的应用架构设计:常用架构与实践 原创

小_铁51CTO
发布于 2025-3-13 22:18
浏览
0收藏

HarmonyOS Design 的应用架构设计:常用架构与实践

引言

在 HarmonyOS 生态蓬勃发展的当下,合理的应用架构设计对于构建高效、稳定且易于维护的应用至关重要。优秀的应用架构不仅能提升应用的性能和响应速度,还能降低开发成本、提高开发效率。本文将介绍 HarmonyOS 中常用的应用架构,并结合实践案例给出代码示例,帮助开发者更好地理解和运用这些架构。

常用的应用架构

MVC(Model - View - Controller)架构

  • 原理:MVC 架构将应用分为三个主要部分,即模型(Model)、视图(View)和控制器(Controller)。模型负责处理数据和业务逻辑;视图负责展示数据给用户;控制器负责接收用户的输入,并根据输入调用模型进行相应的处理,然后更新视图。
  • 优点:职责分离清晰,便于代码的维护和测试;可以同时支持多个视图,提高代码的复用性。
  • 缺点:控制器可能会变得过于庞大,导致代码的可维护性下降;视图和模型之间的耦合度较高。

MVP(Model - View - Presenter)架构

  • 原理:MVP 架构是 MVC 架构的一种演变,它将控制器换成了 Presenter。Presenter 负责处理视图和模型之间的交互,它从模型获取数据,并将数据处理后传递给视图进行展示。视图和模型之间没有直接的交互,而是通过 Presenter 进行沟通。
  • 优点:进一步降低了视图和模型之间的耦合度,提高了代码的可测试性;Presenter 可以独立于视图进行测试。
  • 缺点:Presenter 中可能会包含大量的业务逻辑,导致 Presenter 变得复杂。

MVVM(Model - View - ViewModel)架构

  • 原理:MVVM 架构引入了 ViewModel 层,它通过数据绑定和命令绑定机制,实现了视图和模型之间的自动同步。ViewModel 负责处理视图的业务逻辑和数据转换,视图只需要关注界面的展示。
  • 优点:实现了视图和模型的完全分离,提高了代码的可维护性和可测试性;数据绑定机制减少了手动更新视图的代码量。
  • 缺点:数据绑定机制可能会增加应用的内存开销;对于简单的应用,使用 MVVM 架构可能会显得过于复杂。

架构设计的实践

MVC 架构实践

以下是一个简单的 HarmonyOS 应用使用 MVC 架构的示例,实现一个简单的计算器功能。

// 模型层:处理计算逻辑                class CalculatorModel {                    public int add(int a, int b) {                        return a + b;                    }                                    public int subtract(int a, int b) {                        return a - b;                    }                }                                // 视图层:展示界面                import ohos.aafwk.ability.AbilitySlice;                import ohos.agp.components.Button;                import ohos.agp.components.Text;                import ohos.agp.components.TextField;                                public class CalculatorView extends AbilitySlice {                    private TextField num1Field;                    private TextField num2Field;                    private Button addButton;                    private Button subtractButton;                    private Text resultText;                                    @Override                    public void onStart(ohos.aafwk.content.Intent intent) {                        super.onStart(intent);                        super.setUIContent(ResourceTable.Layout_ability_calculator);                                        num1Field = (TextField) findComponentById(ResourceTable.Id_num1_field);                        num2Field = (TextField) findComponentById(ResourceTable.Id_num2_field);                        addButton = (Button) findComponentById(ResourceTable.Id_add_button);                        subtractButton = (Button) findComponentById(ResourceTable.Id_subtract_button);                        resultText = (Text) findComponentById(ResourceTable.Id_result_text);                    }                                    public String getNum1() {                        return num1Field.getText();                    }                                    public String getNum2() {                        return num2Field.getText();                    }                                    public void setResult(String result) {                        resultText.setText(result);                    }                                    public void setAddButtonClickListener(ohos.agp.components.Component.ClickedListener listener) {                        addButton.setClickedListener(listener);                    }                                    public void setSubtractButtonClickListener(ohos.agp.components.Component.ClickedListener listener) {                        subtractButton.setClickedListener(listener);                    }                }                                // 控制器层:处理用户输入和调用模型                public class CalculatorController {                    private CalculatorModel model;                    private CalculatorView view;                                    public CalculatorController(CalculatorModel model, CalculatorView view) {                        this.model = model;                        this.view = view;                                        view.setAddButtonClickListener(new ohos.agp.components.Component.ClickedListener() {                            @Override                            public void onClick(ohos.agp.components.Component component) {                                int num1 = Integer.parseInt(view.getNum1());                                int num2 = Integer.parseInt(view.getNum2());                                int result = model.add(num1, num2);                                view.setResult(String.valueOf(result));                            }                        });                                        view.setSubtractButtonClickListener(new ohos.agp.components.Component.ClickedListener() {                            @Override                            public void onClick(ohos.agp.components.Component component) {                                int num1 = Integer.parseInt(view.getNum1());                                int num2 = Integer.parseInt(view.getNum2());                                int result = model.subtract(num1, num2);                                view.setResult(String.valueOf(result));                            }                        });                    }                }                
  • 1.

MVVM 架构实践

以下是一个使用 MVVM 架构实现的简单列表展示示例,使用了 HarmonyOS 的​​Observable​​和​​Observer​​机制。

// 模型层:数据类                import ohos.data.orm.OrmContext;                import ohos.data.rdb.RdbStore;                import ohos.data.rdb.StoreConfig;                                 class Item {                    private String name;                                     public Item(String name) {                        this.name = name;                    }                                     public String getName() {                        return name;                    }                                     public void setName(String name) {                        this.name = name;                    }                }                                 // ViewModel层:处理业务逻辑和数据转换                import ohos.event.notification.NotificationHelper;                import ohos.event.notification.NotificationRequest;                import ohos.miscservices.pasteboard.PasteData;                import ohos.miscservices.pasteboard.Pasteboard;                import ohos.miscservices.pasteboard.SystemPasteboard;                import ohos.rpc.RemoteException;                import java.util.ArrayList;                import java.util.List;                                 class ItemViewModel {                    private List<Item> itemList;                                     public ItemViewModel() {                        itemList = new ArrayList<>();                        itemList.add(new Item("Item 1"));                        itemList.add(new Item("Item 2"));                        itemList.add(new Item("Item 3"));                    }                                     public List<Item> getItemList() {                        return itemList;                    }                }                                 // 视图层:展示界面                import ohos.aafwk.ability.AbilitySlice;                import ohos.agp.components.Component;                import ohos.agp.components.DirectionalLayout;                import ohos.agp.components.Text;                import java.util.List;                                 public class ItemView extends AbilitySlice {                    private DirectionalLayout itemLayout;                    private ItemViewModel viewModel;                                     @Override                    public void onStart(ohos.aafwk.content.Intent intent) {                        super.onStart(intent);                        super.setUIContent(ResourceTable.Layout_ability_item);                                         itemLayout = (DirectionalLayout) findComponentById(ResourceTable.Id_item_layout);                        viewModel = new ItemViewModel();                                         showItems();                    }                                     private void showItems() {                        List<Item> itemList = viewModel.getItemList();                        for (Item item : itemList) {                            Text text = new Text(getContext());                            text.setText(item.getName());                            itemLayout.addComponent(text);                        }                    }                }
  • 1.

总结

在 HarmonyOS 应用开发中,选择合适的应用架构对于项目的成功至关重要。MVC、MVP 和 MVVM 架构各有优缺点,开发者应根据项目的规模、复杂度和需求来选择合适的架构。通过合理的架构设计和实践,可以提高应用的开发效率、可维护性和性能,为用户带来更好的体验。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
收藏
回复
举报
回复
    相关推荐