一种能够快速进阶的学习方式

首先这不是一条广告,也不是鸡汤,更不可能一招吃遍天下,先听下我的思路吧。

晚上下地铁的时候,突然想到一个需求,是关于防火墙的,看似简单的防火墙需求,我已经翻来覆去想了好多的招了。

比如下面这样一个页面,我们可以查询防火墙信息。

但是查询的时候有很多需要注意的地方,我们是直接查询系统层的防火墙信息吗?

其实可以更高效一些,如果是一个建设完善的环境,或者逐步完善,基于幂等性,我们其实可以让这个过程更加平滑。如果防火墙信息我们记录在了数据库中,那么我们直接查看本地即可,就不用查询系统层的防火墙信息了,否则我们做得其实更多,我们要从系统层得到防火墙信息,然后把这个权限信息沉淀下来,存入库中,然后返回。

这种操作方式可以用类似的伪代码来说明:

get object info

if object.count() >=1:

then return object.info

else:

obj = object.info

obj.id = id

obj.name = name

obj.save()

return obj

而插入防火墙信息,是一个POST请求,看起来是两个截然不同的操作,但是我们也可以集成一下。

比如插入数据前,我们先在本地数据库中查看是否存在,如果存在,则返回,否则写入数据库中,写入系统防火墙层面,然后返回。

这种操作方式可以用类似的伪代码来说明:

if object.count() >= 1:

return 'already exists'

else:

obj = object.info

obj.id = id

obj.name = name

obj.save()

return obj

这样看来,其实一个查询和插入的操作,如果从完善的角度来看,其实步骤是很相似的。我们完全可以基于这个模型做一层重构,把相似的逻辑都抽取出来,统一处理,这样一来如果需要在某个地方写入日志或者加入审计等,我们都有一个统一的入口来处理。

然后问题就来了,模型字段映射的过程是里面篇幅最长的部分,比如存在下面的字段,分别来自于模型m1,m2,字段分为是field1,field2,field3

'm1_field1','m2_field1'

'm1_field2','m2_field2'

'm3_field3','m3_field3'

那么对于这种映射关系我们怎么来处理呢,如果有Java基础的同学,很自然的会联想到使用HashMap,但是在Python里面显然不是,Python没有原生的HashMap,而且要实现也需要做大量的转换和映射。所以这个层面来考虑就需要充分利用到Python的优势,里面有字典,我们就把字典用透。这个过程要实现还是需要花费一些精力和时间的,这样就是一个迭代定制的过程。

那么到了这里,如果我们自己用查看各类的帖子,其实是很难找到精确的问题解决思路的。所以在这个时候我们就要充分利用到开源红利之一,源代码开放,开放就意味着我能够很容易的查看源码,然后基于这些代码做相应的改进。

就这样我下载了Django的源代码,对于我来说,我最喜欢Django的地方恰恰就在于ORM,当然我只用到了里面最基本的功能,对于外键等复杂功能一概不用。包括到了现在回过头来看,当时的选择还是正确的。

所以如何快速的提高自己的代码能力,设计能力,其实阅读源代码就是一个很好的习惯。这里完全没有捷径,这是你走的时候会更加有方向感,除此之外,每个人的收获就和出发点和态度密切关联了。

好了,Flag立好了,打不打脸就看自己的决心和毅力了。欢迎拍砖,欢迎建议。

本文分享自微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏更流畅、简洁的软件开发方式

文档驱动式代码设计器——代码是设计出来的!

  代码是敲出来的吗?是批量生成出来的吗?   No no no,代码是设计出来的!   如果说到代码生成器,大家可能会想到三层、动软代码生成器、数据库表等等。...

24280
来自专栏高性能服务器开发

9 百万用户级游戏服务器架构设计

所谓服务器结构,也就是如何将服务器各部分合理地安排,以实现最初的功能需求。所以,结构本无所谓正确与错误;当然,优秀的结构更有助于系统的搭建,对系统的可扩展性及可...

1.2K50
来自专栏点滴积累

geotrellis使用(三十七)COG 基础介绍

前言 Geotrellis 已经迭代到了 2.0 版本(截止写作此文时为 2.0.0-SNAPSHOT 版),2.0 版多了很多新的特性,其中最重要的应该就是 ...

474140
来自专栏非著名程序员

Android N 第四个开发者预览版更新,即最终版 API 和 SDK 发布

? 今天Google官方推出了Android N的第四个预览版,相比前三个预览版,SDK和API最终定型。新的版本全名叫作Android N Dev Prev...

20660
来自专栏互联网高可用架构

如何设计一款多场景分布式发号器(Vesta)

56630
来自专栏aCloudDeveloper

DPDK 全面分析

随着云计算产业的异军突起,网络技术的不断创新,越来越多的网络设备基础架构逐步向基于通用处理器平台的架构方向融合,从传统的物理网络到虚拟网络,从扁平化的网络结构到...

1.2K40
来自专栏ImportSource

NoSQL Sharding 分片

翻译内容: NoSQL Distilled 第四章 Distribution Models 作者简介: ? 本节摘要: 各位周末好,今天我们主...

475120
来自专栏SDNLAB

ODL Lithium SR2版本Entity Ownership Service分析及OFplugin规模部署可用预测

家好,我是盛科网络负责sdn研发的张东亚,作为sdn设备的提供商,业余非常关注sdn生态圈的发展,最近抽时间研究了li版本of plugin的代码,记录了一些心...

33850
来自专栏机器学习算法与Python学习

给Python初学者:如何用 Django 写一个36Kr

关键字全网搜索最新排名 【机器学习算法】:排名第一 【机器学习】:排名第二 【Python】:排名第三 【算法】:排名第四 首先需要说明一下,这篇教程是写给初学...

38570
来自专栏散尽浮华

Linux系统下CPU使用(load average)梳理

在平时的运维工作中,当一台服务器的性能出现问题时,通常会去看当前的CPU使用情况,尤其是看下CPU的负载情况(load average)。对一般的系统来说,根据...

1.2K60

扫码关注云+社区

领取腾讯云代金券