策略模式(Strategy Pattern)来自四人帮的《设计模式:可复用面向对象软件的基础》一书。先看维基百科的描述:
而我对它的理解,是“隔离出**有多种选择的部分**”,就如工具箱里的多用螺丝刀——一把螺丝刀可以装上十字头、一字头甚至是锥子头。
我们知道,Python 的构造函数有两个,一个是我们最常用的 __init__ ,另一个是很少用到的 __new__ 。而从它们的函数定义 def __new__(cls, [...]) 和 def __init__(self, [...]) 可以知道, __init__ 被调用时实例已经被创建(就是 self 参数所引用的);而 __new__ 被调用的时候,实例不一定已被创建(暂时只能这么说),而 __new__ 的第一个参数为当前类的引用。
所以我们可以通过一些途径,跟踪 Python 对象的实例化过程,来研究 __new__ 和 __init__ 的工作。这个途径就是上一篇博文 利用 with 语法实现可拆卸的装饰器 中用到的函数调用轨迹装饰器。
最近读 Martin Folwer 的《企业应用架构模式》,其中对于关系型数据库与对象模型的同步问题,提到了使用 DataMapper 和工作单元来协调。
而关系型数据库的数据储存和对象模型的差异在于,关系型数据库是不允许集合类型存在的。在典型的 1 - N 关系模式中,是由 N 来保存对 1 的引用(数据库中体现为外键);而在对象模型中, 1 - N 的聚集关系是由 1 来保存 N 的集合。也就是说,数据映射层的一个职责,是完成这个“翻转”过程。
原文地址(需要深圳大学校园卡才能访问,信件已被删除): 深圳大学校长信箱 <https://bit.ly/lyuS7w> _
昨早9点,学生突有急事准备由斋区经北门去地铁站,但是步行至元平体育馆门口却发现道路已经关闭,由于有急事,所以求看守的警察求情,但是该警察不但态度恶劣,出言不逊,并且对手无缚鸡之力的学生动粗,还以检查为名扣住了我们的学生证,但是被学生抢了回来。最后叫来了3辆警车加以恐吓,并扬言要抓捕我们。这与土匪有何差异?更戏剧性的事,一辆领导的车欲通行却畅通无阻,我们质问为何不提前告知,领导言,现告之,听之。这就是中国之领导特权。这不禁让我想起了克拉玛依大火中,让领导先走的情景。
话说这货是从 Martin 大神的《企业应用架构模式》中学到的,辅助 PHP 动态语言的特性,可以比 Java 轻松很多的实现延迟加载——通过一个虚代理占位符。唯一的缺陷,是只能代理对象,不能代理内置基本类型。
我试水的 PHP 领域模型设计中,也是用这个来实现 DomainObject 的延迟加载。
貌似很多人是零配置控啊,喜欢类似 Flask 一类的零配置路由,不需要在 run.py 中写一个长列表,只需要在接受请求的函数 or 类前面加一个装饰器,正如:
对比 web.py 的集中配置:
貌似二者没神马区别嘛,只不过把集中的配置分散了。当然对于这个问题也是很多不同看法,有人觉得分散了配置不利统一管理,有人觉得把 url 和请求处理者放在一起有利于模块的无缝装卸。当然最理想的是两种选择都存在。在豆瓣上已经看到有人提出 给 web.py 添加装饰器路由的方式 <http://www.douban.com/group/topic/12998784/> _ 了,我自己也写了个 tornado 版的。