Qt 项目中的View、Controller

2019-11-05

  我发现,一些Qt项目中,开发者因为Qt的框架提供了很好的解耦方式,便不再关注controller,把widget class 当作controller。这实在是不应该。在这样的代码基础上进行下去,就会发现所有的东西都逐渐放在了widget上。超大的cpp文件,ui、逻辑、数据库操作,混杂,不可直视。在这里,我们假设系统比较简单,MVC中Model包含了数据库访问(DAO),Controller包含业务层(如复杂业务算法或流程)。

  我在之前的文章中提过:Qt本身弱化了Controller 概念,把Controller和View 放在一起了。这是合理的,因为signal/slot机制提供了强大的解耦能力。但是,这绝不应该是鼓励我们不重视独立的controller。其一,没有单独的controller,也会导致View包含了过多的业务限制。如果别的业务想要复用View,就会发现难以做到。其二,view包含了太多的东西,导致代码混乱,难以维护。

  过分剥离View与Controller,就会走向另外一种极端。例如在桌面端程序中模仿Web项目中的View/Controller。要知道,web业务比多数桌面端的业务规则是要简单的。Web中的编程范式更像是函数式编程,注重数据的流向。但是,我们是难以看到函数式语言写桌面端项目的,天然不适合。桌面端的View/Controller有着更强的联系,一个View导致的Model层的变动,会牵连导致不少View变动。

  合理的做法是,基本上,一个页面就会需要对应一个controller,特别是直接涉及到操作网络或者数据库的 页面。因为Qt 天然的让view承担了部分的c

Qt的Model/View是一种基于MVC(Model-View-Controller)设计模式的实现方式。Model/View架构将数据的存储和显示分离开来,使得程序的结构更加清晰,并且可以提高程序的可维护性和可扩展性。 在Qt,Model/View是面向对象的。它由三个基础类组成:QAbstractItemModel、QAbstractTableModel和QAbstractListModel。QAbstractItemModel为QAbstractTableModel和QAbstractListModel提供了接口规范,使用它可以将数据模型与View分离开来。QAbstractTableModel主要为表格型数据模型定义了一套标准。QAbstractListModel与之类似,为列表型数据模型定义了一套标准。 在Model/View,Model提供了从数据源获取数据并将其封装成数据项及其属性的方式。而View根据Model提供的数据项及其属性,对其进行可视化展示。对于数据的修改和删除等操作,则通过View传递给Model来进行实现。 Model的数据来源可以是任何类型的数据,例如数据库、XML文件、内存的数据等等。Model和View之间的通信是通过信号和槽机制来实现的。当Model的数据发生变化时,它会发出数据变化的信号,View会从这些信号得知数据发生了哪些改变,然后对其进行更新。 Model/View提供了一种灵活、高效、可扩展的方案来处理数据。在Qt,开发者可以使用其提供的各种Model和View类,或者继承这些类来实现自己的数据模型和视图类,以便更好地满足自己的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值