摘要:层是将生成的文件转化成代码,不直接修改层的代码实现对数据库的操作,并。作为中间层,调用层的方法获取结果,完成逻辑功能,再传递给层实现数据渲染。我选择将层作为一个部件类,装配到层,原先的和的关系不变。
写了几个小项目,在帮助同事的时候发现,每个人对MVC这种设计模式的理解各有千秋。
我对于MVC的理解是M即Model,指的是数据库层面,V即View,指的是视图层面,至于C即Control,则是代码的逻辑部分。
项目背景介绍,使用QT5写Gui,Mysql作为数据库。
我采用C继承V,M继承C的模式来实现MVC。view层是将QT生成的ui文件转化成python代码,不直接修改view层的代码;model实现对数据库的CRUD操作,并return。control作为中间层,调用model层的方法获取结果,完成逻辑功能,再传递给view层实现数据渲染。
# view.py class View(QDialog): pass def render_view(self, data): # render view pass # control.py class Control(View): pass def do_something(self): data = self.get_data() self.render_view(data) # model.py class Model(Control): pass def get_data(self): return "something"
由于model层继承于control层,当我调用model层,也就是control的子类的方法时,它是不存在的,所以我得先声明一个空方法。
#control.py class Control(View): pass def do_something(self): data = self.get_data() self.render_view(data) def get_data(self): pass
但达到一定量的代码量时,发现control层的pass方法(方法体内只有pass)越来越多,觉得这样不妥呀~,而且当我要测试数据库交互是否正常时,也就是测试model层的代码,总是会弹出它爸爸的爸爸,也就是view层写的Gui,导致感觉非常难受。
于是乎,选择重构,前后花了两周不到的时间,复用了部分逻辑,代码从18K+降到了11K左右。
我选择将model层作为一个部件类,装配到control层,原先的view和control的关系不变。
# view.py class View(QDialog): pass def render_view(self, data): # render view pass # control.py class Control(View): def __init__(self): super().__init__() self.model = Model() pass def do_something(self): data = self.model.get_data() self.render_view(data) # model.py class Model(object): pass def get_data(self): return "something"
这样处理后,我的model层至此和逻辑彻底分离,测试数据库交互方便多了,直接在model层下写个main方法就可以了,而且针对control层可以进行复用,也就是在相同Gui下,我可以在control层实例化多个不同的model,根据业务需要调用不同的model,提升代码的复用率。
哇咔咔~~
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/41139.html
摘要:前提好几周没更新博客了,对不断支持我博客的童鞋们说声抱歉了。熟悉我的人都知道我写博客的时间比较早,而且坚持的时间也比较久,一直到现在也是一直保持着更新状态。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好几周没更新博客了,对不断支持我博客的童鞋们说声:抱歉了!。自己这段时...
摘要:本人年开发经验,现就职于电信,因工作需要学习,记录自己的学习记录。 本人java10年开发经验,现就职于电信,因工作需要学习python,记录自己的学习记录。后面也...
摘要:开头正式开启我入职的里程,现在已是工作了一个星期了,这个星期算是我入职的过渡期,算是知道了学校生活和工作的差距了,总之,尽快习惯这种生活吧。当时是看的廖雪峰的博客自己也用做爬虫写过几篇博客,不过有些是在前人的基础上写的。 showImg(https://segmentfault.com/img/remote/1460000010867984); 开头 2017.08.21 正式开启我...
摘要:用也有三四个月了,虽然是兼职开发,但是使用的频率非常之高,毕竟是产品化的一个项目。第二阶段数据库和开发了比较多的功能之后,会发现需要大量的测试数据,这时候和就该大显身手了。 用Laravel也有三四个月了,虽然是兼职开发,但是使用的频率非常之高,毕竟是产品化的一个项目。在这期间,也踩了无数的坑,走了很多弯路,所以准备把最近的感悟记录下来,方便后来者。 第一阶段:简单的增删改查 这是最...
阅读 1226·2023-04-25 18:57
阅读 2079·2023-04-25 16:28
阅读 3897·2021-11-24 09:39
阅读 3606·2021-11-16 11:45
阅读 1794·2021-10-13 09:40
阅读 1245·2019-08-30 15:52
阅读 1696·2019-08-30 10:57
阅读 578·2019-08-29 16:55