资讯专栏INFORMATION COLUMN

Python之MVC

WelliJhon / 940人阅读

摘要:层是将生成的文件转化成代码,不直接修改层的代码实现对数据库的操作,并。作为中间层,调用层的方法获取结果,完成逻辑功能,再传递给层实现数据渲染。我选择将层作为一个部件类,装配到层,原先的和的关系不变。

了几个小项目,在帮助同事的时候发现,每个人对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); 前提 好几周没更新博客了,对不断支持我博客的童鞋们说声:抱歉了!。自己这段时...

    JerryWangSAP 评论0 收藏0
  • python入门 django入门 (一)

    摘要:本人年开发经验,现就职于电信,因工作需要学习,记录自己的学习记录。 本人java10年开发经验,现就职于电信,因工作需要学习python,记录自己的学习记录。后面也...

    hzc 评论0 收藏0
  • 那些年我看过的书 —— 致敬我的大学生活 —— Say Good Bye !

    摘要:开头正式开启我入职的里程,现在已是工作了一个星期了,这个星期算是我入职的过渡期,算是知道了学校生活和工作的差距了,总之,尽快习惯这种生活吧。当时是看的廖雪峰的博客自己也用做爬虫写过几篇博客,不过有些是在前人的基础上写的。 showImg(https://segmentfault.com/img/remote/1460000010867984); 开头 2017.08.21 正式开启我...

    xiaoqibTn 评论0 收藏0
  • Laravel 菜鸟晋级

    摘要:用也有三四个月了,虽然是兼职开发,但是使用的频率非常之高,毕竟是产品化的一个项目。第二阶段数据库和开发了比较多的功能之后,会发现需要大量的测试数据,这时候和就该大显身手了。 用Laravel也有三四个月了,虽然是兼职开发,但是使用的频率非常之高,毕竟是产品化的一个项目。在这期间,也踩了无数的坑,走了很多弯路,所以准备把最近的感悟记录下来,方便后来者。 第一阶段:简单的增删改查 这是最...

    YacaToy 评论0 收藏0

发表评论

0条评论

WelliJhon

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<