软件开发真的这么简单吗?

 
  最近在做一个项目,需求很简单,但是细节比较多!从开发中,领悟到一些东西与大家分享。
 
排期
 
PM(产品经理)需求
  1. 绑定某个手机终端
  2. 解绑某个手机终端
  3. 解绑某个用户的所有手机终端
  4. 查询某个用户的绑定设备信息

  已经给了你这样的需求,那么接下来要做什么?PM当然会询问排期。如果让你排期,你会给几天时间?你怎么考虑的排期?

  反正让我排期,我排不出来。于是接下来我要做的是拿出我的xmind软件,在跟PM确认需求,定方案。最后用了两个小时,把需求再次确认,并给出了如下的排期:

软件开发真的这么简单吗?

 

后来我又问了一个细节,新域名service.xx.com是否已经有了?PM告知无,所以需要走申请流程1d。——最后的时间定位1周(5天)时间。

 

环境
 
  是部署在新服务器上?还是部署在旧的服务器上?
  有人会问,这有区别吗?——当然是有区别的,如果是新服务器,给了你更大的空间。比如对于php来说,你可以选择更高的版本,可以选择更好的框架(Zend Framework),但是对于旧环境,那你的框架就受到限制了。如:你要看旧的服务器上的php版本,是否在旧的服务器上有好的php框架。
 
  后来的方案是,在旧的服务器上添加个虚拟机。旧的服务器上php代码是面向过程写的(是java程序员写的),所以我决定使用好的php框架,便于后期维护和扩展,故尝试着使用zend framwork框架,但是经常性的报一些受php版本限制的错误。尝试了好几个版本的zend framework,最终放弃使用zend framework。选择了Thinkphp框架。——这已经费了小半天的时间。
 
表设计
 
  着手设计表。
 
  在设计表的时候你会想什么?
  第一、表结构肯定是首选了。(是用int型还是varchar型,如状态字段的类型选择,我选择了tinyint(1),也可以使用enum)
  第二、命名。好的命名能让开发者一目了然,加深你对系统的了解。
  第三、表引擎的选择。是用MyISAM呢,还是Innodb?你知道这两个表的区别吗?——我选择了Innodb。
  第四、索引。这个初期你最好不要事先进行设计,我是在代码成形的阶段,才开始加的。
  第五、注释。你习惯在建字段的时候加comment吗?如果你经常用desc table_name命令查看表结构的话,那你肯定觉得没什么用?我经常是用show create table table_name看表结构的,注释一目了然。
   软件开发真的这么简单吗?

 

开发
 

  编码是个细致活,那么在编码开始阶段你要做什么?不会是着急把代码写好吧?

  我考虑的是:

  第一、干净的代码;

    框架:能让你的代码结构很整齐,我用的是Thinkphp,也是第一次使用。先找到官方的文档,记住不要一次性想把整个文档看完,我是边用边看的方式进行的。开始阶段主要看的地方是:mvc结构;

    好的命名:不要用自己习惯的命名方式,要以框架的命名方式去编码,要不然其他coder也习惯用自己的命名方式去coding,那么代码看起来就没那么干净了。

  第二、传入参数的校验;

    通过业务,你要确认,你的系统将会接受什么样的参数?

    int型的是最让我舒服的,不会引起什么SQL注入,XSS问题,直接用intval强类型转换。

    最让人头痛的就是字符型,考虑很多方面,SQL注入,XSS攻击等。对于SQL注入,我仔细看了一下Thinkphp的文档,只要你用数组传递参数给指定的类,你就不用担心SQL注入的问题(这也是用框架的好处)。xss攻击:利用php的htmlspecialchars, 把字符转成html结构的字符。

  第三、更新、插入操作;

     1、事务:优点是插入和更新时保证数据的一致性、原子性、隔离性、持久性;但是也有一个问题,会有锁行记录的问题。

     2、在更新和插入之前,你做了查询吗?就是判断是否有这条记录。

  第四、日志;

     1、线上代码出问题,你是怎么定位问题的?很多时候,有些问题,你是无法在开发机和测试机器上复现出来的。我的办法就是日志。

       2、安全性:你的日志是否有安全漏洞(把公司内部的信息暴漏到日志里)?那你怎么控制的?——一个办法就是设置日志级别,thinkphp框架自身就有日志级别。

     3、方便性:你的日志打出来之后,你能找到问题吗?

      原来的做法:程序读到日志断点的位置的时候,就把日志追加到日志文件里。——问题来了,当有一些并发的时候,日志里会把很多请求的日志交错的打到文件里,查询问题非常不方便。

      thinkphp给出的做法(不错的做法):本身也有上面的做法(原来的做法);新学到的招数是,把日志内容一行一行的放到内存里,最后结束的时候,一次性打到日志文件里。

软件开发真的这么简单吗?

 

    4、错误码;

      你的错误码是什么样的?你设计过吗?是否成功就0,错误就<0,错误码挨着往下出溜。最好有个统一的规范。

 

 软件开发真的这么简单吗?

 

    5、开发文档

    你有写文档的习惯吗?很多程序员跟我说,写文档太费时间了,我个人是习惯边写代码边写文档.你的文档用什么写?我早期习惯在公司的系统上写,但是发现速度很慢,而且查某个点的时候,比较麻烦,所以我习惯用word编写。

    文档有什么用?

    1>是容易让我理解代码;

    2>是后期维护方便;这系统不是写完了就了事的,后期还需要你维护,或者给别的程序员维护。

  我经常接手别的程序员写的代码。出了问题,问他怎么回事?每次回我的话就是看代码啊!这时候我就要从内心骂人了!

    3>是你写的接口是给人调用的,你怎么告诉调用者你的接口形式?我比较懒,直接把文档交给他,省事了。如果他有些地方看不懂,那就说明,你没理解或者你没写清楚,一方面加深你对系统的理解,另一方面也能增加你写文档的功底;

软件开发真的这么简单吗?

总结
 
   写代码真的很不容易,有很多方面你要考虑的。如果你有更好的意见,请多多指教!
 
推荐
 
软件开发真的这么简单吗?

软件开发真的这么简单吗?

上一篇:C# 傅里叶变换 逆变换 调用MathNet包


下一篇:如何精通java技术