我在搭建榄盛邦的后台框架(类MVC,基于Python Flask开发)的时候,在Model
基类的构造函数里写了一个小功能。即如果构建Model
对象时如果没有传入DBSession
对象(SQLAlchemy数据库Session对象),则自动创建,并赋值给self.session
。这样做的好处主要是简化开发。例如:
原写法:
def update_username(user_id, username):
db_session = DBSession()
Model(db_session).update_username(user_id, username)
db_session.close()
新写法
def update_username(user_id, username):
Model().update_username(user_id, username)
减少了一些代码量,也让代码看起来更舒服。但是这段代码让我以后麻烦不断。
有一次,我被告知用户提现,显示提现显示失败,但余额被冻结,过了很久前既没有到账,也没有退回到余额。我查询服务器得知,在向第三方支付服务器发送提现请求时,因为网络问题出现了超时异常。
我检查了一下代码,发现后台程序员使用了没有传递DBSession
对象的Model
对象。原因是使用不传递DBSession
对象的Model
对象习惯了,函数里没有DBSession
对象,于是也没有想到出现异常回滚的操作。我当时令其修稿,但是后来还是会不时出现这种事情。
后来我想到,如果我当初没有编写这个功能,出错的概率会不会小一点。我想是的。
总结:在创业公司,受困于资金:
- 很难招到足够水平的开发人员
- 往往缺失了测试环节
也就是说,创业公司开发的产品,容易出BUG,而且有相当一部分的BUG是在上线后才逐渐浮现的。我对此的应对意见是:在不能招人、增加测试的情况下,尽量使用最简单的方式,尽量不使用技巧。