django 设计模式

在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合,这就是命令模式(Command Pattern)。

命令模式有以下特点:

命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开。
每一个命令都是一个操作:请求的一方发出请求,要求执行一个操作;接收的一方收到请求,并执行操作。
命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求是怎么被接收,以及操作是否被执行、何时被执行,以及是怎么被执行的。
命令模式使请求本身成为一个对象,这个对象和其他对象一样可以被存储和传递。
命令模式的关键在于引入了抽象命令接口,且发送者针对抽象命令接口编程,只有实现了抽象命令接口的具体命令才能与接收者相关联。
在Django中,把get和post这些请求的行为抽象成一个HttpRequest类,我们可以通过request实例的method获取行为的类型:

观察者模式(有时又被称为发布(publish)-订阅(Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式)是软件设计模式的一种。在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实现事件处理系统。

Django中,存在Singal与dispatch类,分别用来发送和接受信号,实现被观察与观察者的角色。

首先,我们可以定义一个观察者,接收一种特定的信号:

此外,Django中也有很多built in的signal类,实现不同的功能。

django.db.models.signals.pre_save & django.db.models.signals.post_save
当一个model执行save()方法,即在model对应的数据库中的一张表插入一条数据的前后发送信号。

django.db.models.signals.pre_delete & django.db.models.signals.post_delete
当一个model执行delete()方法,即在model对应的数据库中的一张表删除一条数据的前后发送信号。

django.db.models.signals.m2m_changed
当model中的一个多对多的关系发生改变时发送信号。

django.core.signals.request_started & django.core.signals.request_finished
当Django开始或者完成一个HTTP请求的时候发送信号。

发布了413 篇原创文章 · 获赞 9 · 访问量 5万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 鲸 设计师: meimeiellie

分享到微信朋友圈

×

扫一扫,手机浏览