我没有学过软件工程,我说的很浅薄。
以面向过程的思维来开发是最正常的,面向过程我觉得就是自下而上的开发。我想把一个网站所有的视频都抓下来。起始页是哪,怎么设置cookie,怎么更换代理 IP... 这些当然事先规划清楚是最好的。
但是如果缺乏经验,想不明白的话,脑子里就一个字 “干”!。找一个视频页,也管多线程,先把这页爬取下来再说。这个 demo 写成了,然后再以此为基础进行抽象组织代码结构,比如分析视频页提取视频链接这块代码可以被复用,那我单独做成一个模块是不是好点,存储到本地实际上就是在一个文件里写入一些bytes,这个单独写成一个函数....
有了这些初步的抽象之后,就以此为基础,我就可以爬取整个用户,爬取整个网站。
按照这个思路,等到代码能够爬取整个网站的视频时,就会比较乱。因为这个项目起初只是想抓一页视频,比如失败视频处理,去重等需求考虑不到,而且表设计的也不好,然后随着问题的暴露,东加一点代码,西加一点代码。因为没有遵循一个函数只做一件事的模式,很多时候代码加下去反而引发了更多的问题。
在这种情况下,我不由的想起了面向对象。我起初对面向对象是这么理解的:
- 对象什么时候需要属性?
很多时候,我们可以把函数中调用的属性以参数的形式传进去。那什么时候我们需要属性呢?即一个变量需要在几个方法中用到,而且这个变量在不同条件下状态还会发生转变,这种情况下,这个变量以属性的形式存在是有必要的。
经过这个事情,我思考的一个问题有了部分答案,什么时候需要类,需要面向对象?
面向对象,也就是自上而下的设计,也就是顶层设计,为了达到心中的一个目标,我们需要一个大纲,这个大纲有哪几个关键人物,这几个关键人物有哪些个性特征。这几个关键人物就是对象,个性特征就是属性。
从对象的角度出发,把这个较大的事情,爬取一个网站,概括成了几个对象,按照既定的大纲写下去就不太会乱。
网友评论