模塊化編程思想

django 中間件 設計思想

通過修改配置文件來添加修改功能,以flask爲例,假如要實現兩種消息發送方式,email和msg

先放文件目錄

message裏面的每一個py文件都對應一種消息發送方式,在__init__中 寫一個通用的send方式,通過讀取setting裏面列表,循環導入message文件夾的每一個類,然後執行類的send方法,都繼承base類是爲了限制必須實現send方法

email.py

from .base import Base

class Email(Base):
    def __init__(self):
        self.name = 'email'

    def send(self):
        print('email_send')

msg.py

class Msg():
    def __init__(self):
        self.name = 'message'

    def send(self):
        print('msg_send')

base.py

class Base():
    def send(self):#必須 實現send方法
        raise NotImplementedError

__init__.py

import setting
import importlib


def send_message():
    for path in setting.MESSAGE:
        m, c = path.rsplit('.', maxsplit=1)#模塊,類 分割出來
        md = importlib.import_module(m) #導入模塊
        obj = getattr(md, c)() #通過反射得到函數並實例化 反射就是通過字符串來執行函數
        obj.send()


app.py

import flask
from util.message import send_message  #只需要導入__init__中的send函數
import util.message.email


app = flask.Flask(__name__)

@app.route("/index")
def index():
    send_message()#實現了  高內聚  低耦合, 通過讀取配置文件來增加功能,增加功能時更改配置文件,再寫一個類實現send方法即可
    return "index"

app.run()

setting.py

MESSAGE = [
    "util.message.email.Email",
    "util.message.msg.Msg"
]

 如果想要加入wechat方式,只需要在setting.py中加入一個str,然後在message中添加一個類實現send方法

不用更改業務邏輯代碼

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章