无知的 tonyseek

Yet Another Seeker

我对策略模式的理解

策略模式(Strategy Pattern)来自四人帮的《设计模式:可复用面向对象软件的基础》一书。先看维基百科的描述:

  • 维基中文站的词条“策略模式” [1]
  • WIKIPEDIA(EN) Strategy Pattern [2]

而我对它的理解,是“隔离出**有多种选择的部分**”,就如工具箱里的多用螺丝刀——一把螺丝刀可以装上十字头、一字头甚至是锥子头。

多用螺丝刀图片,来自维基共享资源,采用知识共享署名-相同方式共享 3.0 Unported 许可协议授权

Python 对象的实例化过程

我们知道,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辆警车加以恐吓,并扬言要抓捕我们。这与土匪有何差异?更戏剧性的事,一辆领导的车欲通行却畅通无阻,我们质问为何不提前告知,领导言,现告之,听之。这就是中国之领导特权。这不禁让我想起了克拉玛依大火中,让领导先走的情景。

【碎片】PHP 虚代理实现延迟加载

话说这货是从 Martin 大神的《企业应用架构模式》中学到的,辅助 PHP 动态语言的特性,可以比 Java 轻松很多的实现延迟加载——通过一个虚代理占位符。唯一的缺陷,是只能代理对象,不能代理内置基本类型。

我试水的 PHP 领域模型设计中,也是用这个来实现 DomainObject 的延迟加载。

【碎片】tornado 用上装饰器路由

貌似很多人是零配置控啊,喜欢类似 Flask 一类的零配置路由,不需要在 run.py 中写一个长列表,只需要在接受请求的函数 or 类前面加一个装饰器,正如:

from bottle import route, run

@route('/:name')
def index(name='World'):
    return '<strong>Hello %s!</strong>' % name

run(host='localhost', port=8080)

对比 web.py 的集中配置:

import web

urls = ("/.*", "hello")
app = web.application(urls, globals())

class hello:
    def GET(self):
        return 'Hello, world!'

if __name__ == "__main__":
    app.run()

貌似二者没神马区别嘛,只不过把集中的配置分散了。当然对于这个问题也是很多不同看法,有人觉得分散了配置不利统一管理,有人觉得把 url 和请求处理者放在一起有利于模块的无缝装卸。当然最理想的是两种选择都存在。在豆瓣上已经看到有人提出 给 web.py 添加装饰器路由的方式 <http://www.douban.com/group/topic/12998784/> _ 了,我自己也写了个 tornado 版的。