參考中介軟體配置實現功能插拔式設計

2022-03-11 06:53:00 字數 2411 閱讀 3336

說白了就是想做到想 注釋中介軟體一樣,存在的時候,全域性都會走那個中介軟體,不要用的時候注釋掉,除了不實現那個功能之外對全域性都不會有影響。

這就是可插拔式設計

首先講解乙個模組importlib

這個模組的作用:以字串的形式匯入模組

module = 'file.a'

importlib.import_module(module)

上面這句就等於下面這句

from file import a

接下來就可以講一下可插拔式設計了。

首先建乙個包notify,包裡面有四個py檔案,__init__.py email.py msg.py wechat.py

然後在根目錄下寫兩個py檔案 ,乙個是 run.py 乙個是settings.py

print('郵件通知:%s'%content)

msg.py

class msg():

def __init__(self):

pass

def send(self,content):

print('簡訊通知:%s'%content)

wechat.py

class wechat():

def __init__(self):

pass

def send(self,content):

print('vx通知:%s'%content)

最重要的乙個py檔案

import settings

import importlib

def send_all(content):

for module_path in settings.notyfy_list:

module, class_name = module_path.rsplit('.',maxsplit=1)

mod = importlib.import_module(module)

# 上面這句等於from notify import email

cls = getattr(mod,class_name) #利用反射獲取模組種類的變數名

obj = cls()

obj.send(content)

總體講解:

首先寫乙個資料夾notify,在這個資料夾裡面寫了三個py檔案,分別用物件導向的方式在每個檔案裡面寫了三個通知的類,每個類都有乙個send方法,用來被呼叫。然後去settings檔案裡面把這三個類的路徑以字串的形式配置好。

然後,最重要的一步開始了,在notify資料夾裡寫了乙個__init__.py檔案,這就讓這個資料夾變成了包。匯入這個包的東西,就只用匯入這個init就行。前提是在init裡面吧那三個py檔案匯入了先。

在init 裡匯入了settings裡的配置好的字串路徑,迴圈這個字串列表,然後通過這句module, class_name = module_path.rsplit('.',maxsplit=1) 切片,module拿到的就是notify.email ,class_name拿到的就是email

然後通過importlib.import_module(module),得到的結果就是那個模組,在這裡也就是email模組。 然後又通過反射,獲取在這個模組裡的類的變數名,用cls來接收,迴圈的第一次就是 email這個類,然後obj = cls()例項化生成了乙個物件,obj.send(content)就執行了他的方法,列印了一條結果,settings裡配置了幾個,就列印幾個結果。當然我們要執行的檔案是 run檔案,run裡面就只用匯入這個包,就相當於匯入了這個包的 init 檔案,直接notify.send_all('輸出我要輸入的字元') 就行了。

這樣一來就實現了可插拔式設計,**不重要,重要的是這個思想。

自定義中介軟體實現插拔設計

不重要,重要的是這個思想 說白了就是想做到想 注釋中介軟體一樣,存在的時候,全域性都會走那個中介軟體,不要用的時候注釋掉,除了不實現那個功能之外對全域性都不會有影響。這就是可插拔式設計。首先講解乙個模組importlib 這個模組的作用 以字串的形式匯入模組 module file.a import...

利用中介軟體Multer實現上傳功能

multer中介軟體實現對multipart form data格式的資料的操作 現在實現上傳的功能,上傳檔案完成後,背景顯示上傳的 首先在html檔案中新增檔案上傳標籤 建立upload.js檔案,定義ajax上傳檔案的方法。這裡運用了xhr2的formdata物件。formdata物件可以傳送二...

分布式資料庫中介軟體DDM的實現原理

隨著資料量不斷增大,傳統的架構模式難以解決業務量不斷增長所帶來的問題,特別是在業務成線性 甚至指數級上公升的情況。此時我們不得不通過水平擴充套件,把資料庫放到不同伺服器上來解決問題,也就是我們說的資料庫中介軟體。作為資料庫中介軟體,分布式資料庫中介軟體ddm將底層資料庫儲存引擎以集群方式管理起來,使...