摘要:層是將生成的文件轉(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
摘要:前提好幾周沒更新博客了,對(duì)不斷支持我博客的童鞋們說聲抱歉了。熟悉我的人都知道我寫博客的時(shí)間比較早,而且堅(jiān)持的時(shí)間也比較久,一直到現(xiàn)在也是一直保持著更新狀態(tài)。 showImg(https://segmentfault.com/img/remote/1460000014076586?w=1920&h=1080); 前提 好幾周沒更新博客了,對(duì)不斷支持我博客的童鞋們說聲:抱歉了!。自己這段時(shí)...
摘要:本人年開發(fā)經(jīng)驗(yàn),現(xiàn)就職于電信,因工作需要學(xué)習(xí),記錄自己的學(xué)習(xí)記錄。 本人java10年開發(fā)經(jīng)驗(yàn),現(xiàn)就職于電信,因工作需要學(xué)習(xí)python,記錄自己的學(xué)習(xí)記錄。后面也...
摘要:開頭正式開啟我入職的里程,現(xiàn)在已是工作了一個(gè)星期了,這個(gè)星期算是我入職的過渡期,算是知道了學(xué)校生活和工作的差距了,總之,盡快習(xí)慣這種生活吧。當(dāng)時(shí)是看的廖雪峰的博客自己也用做爬蟲寫過幾篇博客,不過有些是在前人的基礎(chǔ)上寫的。 showImg(https://segmentfault.com/img/remote/1460000010867984); 開頭 2017.08.21 正式開啟我...
摘要:用也有三四個(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)單的增刪改查 這是最...
閱讀 1255·2023-04-25 18:57
閱讀 2142·2023-04-25 16:28
閱讀 3947·2021-11-24 09:39
閱讀 3641·2021-11-16 11:45
閱讀 1831·2021-10-13 09:40
閱讀 1272·2019-08-30 15:52
閱讀 1725·2019-08-30 10:57
閱讀 671·2019-08-29 16:55