成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Python之MVC

WelliJhon / 1143人閱讀

摘要:層是將生成的文件轉(zhuǎn)化成代碼,不直接修改層的代碼實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作,并。作為中間層,調(diào)用層的方法獲取結(jié)果,完成邏輯功能,再傳遞給層實(shí)現(xiàn)數(shù)據(jù)渲染。我選擇將層作為一個(gè)部件類,裝配到層,原先的和的關(guān)系不變。

了幾個(gè)小項(xiàng)目,在幫助同事的時(shí)候發(fā)現(xiàn),每個(gè)人對(duì)MVC這種設(shè)計(jì)模式的理解各有千秋。
我對(duì)于MVC的理解是M即Model,指的是數(shù)據(jù)庫(kù)層面,V即View,指的是視圖層面,至于C即Control,則是代碼的邏輯部分。
項(xiàng)目背景介紹,使用QT5寫Gui,Mysql作為數(shù)據(jù)庫(kù)。
我采用C繼承V,M繼承C的模式來實(shí)現(xiàn)MVC。view層是將QT生成的ui文件轉(zhuǎn)化成python代碼,不直接修改view層的代碼;model實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的CRUD操作,并return。control作為中間層,調(diào)用model層的方法獲取結(jié)果,完成邏輯功能,再傳遞給view層實(shí)現(xiàn)數(shù)據(jù)渲染。

# 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層,當(dāng)我調(diào)用model層,也就是control的子類的方法時(shí),它是不存在的,所以我得先聲明一個(gè)空方法。

#control.py    
class Control(View):
    pass
    
    def do_something(self):
        data = self.get_data()
        self.render_view(data)
        
    def get_data(self):
        pass

但達(dá)到一定量的代碼量時(shí),發(fā)現(xiàn)control層的pass方法(方法體內(nèi)只有pass)越來越多,覺得這樣不妥呀~,而且當(dāng)我要測(cè)試數(shù)據(jù)庫(kù)交互是否正常時(shí),也就是測(cè)試model層的代碼,總是會(huì)彈出它爸爸的爸爸,也就是view層寫的Gui,導(dǎo)致感覺非常難受。

于是乎,選擇重構(gòu),前后花了兩周不到的時(shí)間,復(fù)用了部分邏輯,代碼從18K+降到了11K左右。
我選擇將model層作為一個(gè)部件類,裝配到control層,原先的view和control的關(guān)系不變。

# 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層至此和邏輯徹底分離,測(cè)試數(shù)據(jù)庫(kù)交互方便多了,直接在model層下寫個(gè)main方法就可以了,而且針對(duì)control層可以進(jìn)行復(fù)用,也就是在相同Gui下,我可以在control層實(shí)例化多個(gè)不同的model,根據(jù)業(yè)務(wù)需要調(diào)用不同的model,提升代碼的復(fù)用率。

哇咔咔~~

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41139.html

相關(guān)文章

  • 寫這么多系列博客,怪不得找不到女朋友

    摘要:前提好幾周沒更新博客了,對(duì)不斷支持我博客的童鞋們說聲抱歉了。熟悉我的人都知道我寫博客的時(shí)間比較早,而且堅(jiān)持的時(shí)間也比較久,一直到現(xiàn)在也是一直保持著更新狀態(tài)。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好幾周沒更新博客了,對(duì)不斷支持我博客的童鞋們說聲:抱歉了!。自己這段時(shí)...

    JerryWangSAP 評(píng)論0 收藏0
  • python入門 django入門 (一)

    摘要:本人年開發(fā)經(jīng)驗(yàn),現(xiàn)就職于電信,因工作需要學(xué)習(xí),記錄自己的學(xué)習(xí)記錄。 本人java10年開發(fā)經(jīng)驗(yàn),現(xiàn)就職于電信,因工作需要學(xué)習(xí)python,記錄自己的學(xué)習(xí)記錄。后面也...

    hzc 評(píng)論0 收藏0
  • 那些年我看過的書 —— 致敬我的大學(xué)生活 —— Say Good Bye !

    摘要:開頭正式開啟我入職的里程,現(xiàn)在已是工作了一個(gè)星期了,這個(gè)星期算是我入職的過渡期,算是知道了學(xué)校生活和工作的差距了,總之,盡快習(xí)慣這種生活吧。當(dāng)時(shí)是看的廖雪峰的博客自己也用做爬蟲寫過幾篇博客,不過有些是在前人的基礎(chǔ)上寫的。 showImg(https://segmentfault.com/img/remote/1460000010867984); 開頭 2017.08.21 正式開啟我...

    xiaoqibTn 評(píng)論0 收藏0
  • Laravel 菜鳥晉級(jí)

    摘要:用也有三四個(gè)月了,雖然是兼職開發(fā),但是使用的頻率非常之高,畢竟是產(chǎn)品化的一個(gè)項(xiàng)目。第二階段數(shù)據(jù)庫(kù)和開發(fā)了比較多的功能之后,會(huì)發(fā)現(xiàn)需要大量的測(cè)試數(shù)據(jù),這時(shí)候和就該大顯身手了。 用Laravel也有三四個(gè)月了,雖然是兼職開發(fā),但是使用的頻率非常之高,畢竟是產(chǎn)品化的一個(gè)項(xiàng)目。在這期間,也踩了無數(shù)的坑,走了很多彎路,所以準(zhǔn)備把最近的感悟記錄下來,方便后來者。 第一階段:簡(jiǎn)單的增刪改查 這是最...

    YacaToy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<