我正在Django中編寫(xiě)一個(gè)項(xiàng)目,并且看到80%的代碼在file中models.py。這段代碼令人困惑,并且在一段時(shí)間之后,我不再了解實(shí)際發(fā)生的事情。這是困擾我的事情:我發(fā)現(xiàn)模型級(jí)別(應(yīng)該只負(fù)責(zé)處理數(shù)據(jù)庫(kù)中的數(shù)據(jù))在發(fā)送電子郵件,使用API到其他服務(wù)等方面也很丑陋。另外,我發(fā)現(xiàn)在視圖中放置業(yè)務(wù)邏輯也是不可接受的,因?yàn)檫@樣很難控制。例如,在我的應(yīng)用程序中,至少有三種方法來(lái)創(chuàng)建的新實(shí)例User,但從技術(shù)上講,它應(yīng)統(tǒng)一創(chuàng)建它們。我并不總是注意到模型的方法和屬性何時(shí)變得不確定,以及何時(shí)出現(xiàn)副作用。這是一個(gè)簡(jiǎn)單的例子。首先,User模型是這樣的:class User(db.Models): def get_present_name(self): return self.name or 'Anonymous' def activate(self): self.status = 'activated' self.save()隨著時(shí)間的流逝,它變成了:class User(db.Models): def get_present_name(self): # property became non-deterministic in terms of database # data is taken from another service by api return remote_api.request_user_name(self.uid) or 'Anonymous' def activate(self): # method now has a side effect (send message to user) self.status = 'activated' self.save() send_mail('Your account is activated!', '…', [self.email])我想要的是在代碼中分離實(shí)體:數(shù)據(jù)庫(kù)級(jí)別的數(shù)據(jù)庫(kù)實(shí)體:什么包含我的應(yīng)用程序?我的應(yīng)用程序的實(shí)體,業(yè)務(wù)邏輯級(jí)別:什么可以構(gòu)成我的應(yīng)用程序?有什么好的實(shí)踐來(lái)實(shí)現(xiàn)可以在Django中應(yīng)用的方法?
django中業(yè)務(wù)邏輯和數(shù)據(jù)訪問(wèn)的分離
呼啦一陣風(fēng)
2019-11-04 14:18:50