这两天利用空闲时间,忙着给公司内部做一个简历系统。虽然说是一个项目,但总有些轻松的味道,毕竟我们(我和另外一个同事一起做)可以自己选择技术栈,自己定义数据库结构,除了客户必须要求的需求外添加自己认为“酷”的功能(有点装B的味道)。于是,我们选择了目前比较流行的RoR(Ruby on Rails),接下来就是见证奇迹的时刻了~~~。
与客户也就是HR MM了解需求的那天早上我错过了,下午到办公室后,意外发现第一个功能已经完成:根据页面上填写的信息创建用户,并在另外一个界面上列出所有创建的用户。他一早上完成需求了解后居然又做了这么多,速度也忒快了。突然想起那哥们曾经说过他对Rails不是很熟悉,我就大概明白是怎么回事了。
打开命令行的历史记录,呈现在我面前的就是3行关键命令:
第一行: rails new xxx,创建一个rails应用,自动生成了项目的大体框架。
第二行: 利用scaffold创建一个代表业务的类Candidate,创建数据库表的sql,对Candidate模型的一个CRUD的控制器(Controller),并且自动生成html页面文件,js,css
第三行:rails server,打开rails服务器,于是我便看到了屏幕里面那个略显简单,但是功能齐全的页面。
那哥们跟我说,他大概用了10分钟时间看rails 文档,然后用了2分钟便成生出这些东西,对,你没看错,全都是自动生成的。Rails帮我们完成了项目初期那些繁琐的体力活,让我们能更加关注在业务逻辑上。难过公司有位大牛曾经说过:只要你跟这rails走,基本上不会碰到什么麻烦事,而且大方向也不会错。
接下来,我们挽起袖子,真正的开始Rails之旅。虽然只有这两天,但“系统”也一点一点完善起来。
1.后台验证
顾名思义,也就是说在写入数据库前要进行一番检查。Rails自带的ActiveRecord帮你搞定,首先它是一个ORM,并且提供了几乎所有与数据库相关的功能,验证当然不在话下,我需要验证Candidate类中name属性不为空,那么只需要在Candadite类中增加一句:
validates_presence_of :name, :message => "姓名不能为空"
然后呢?然后就没有了,这就是关于name验证的全部代码。
2.上传文件
对于这个需求,一句话,没做过,不知道如何处理。果然问大牛,没有死磕,大牛曰:carrierwave,于是打开google,输入 rails carrierwave,找到github,发现carrierwave是一个ruby gem,类似与java 中的jar包。15分钟文档时间,按照文档的指引15分钟实现,共半小时引入上传功能。
也许你会问,上传的文件不需要验证么?哈哈,问的好。因为我需要验证文件类型,文件大小。google5分钟后,发现carrierwave的补丁文件,10分钟完成验证上传文件功能。
3.下载文件
有了上传的经验,YY着肯定有gem完成下载功能,结果google rails download file后,发现rails本身就自带send_file方法,框架自带下载功能,又是一个10分钟的事情。。。
4.验证邮件
当用户操作成功后,给用户发一封确认邮件。于是,我不说你也猜到了吧,google rails send email,这次发现的不是网页了,而是一个叫做railscasts.com的网站,里面的视频就是教你如何完成“用户注册成功后发送确认邮件”的功能。。。20分钟视频,10分钟实现。后来发现这种实现是同步邮件,也就是系统发完邮件之后才会重新加载页面,严重影响用户体验,于是找到一个异步发邮件的gem,准备下次利用起来。
通过这些,我想你印象最深的就是那些“10分钟”了吧,其实,这些都是rails给我们带来的便利,作为一个web应用程序开发框架,rails已经把我们基本想要的准备好了,对于常规功能你只需要“10分钟”了解一下,然后利用就行了。而且在Rails社区里面,由大把大把的开发人员不停的通过引进新的gem来扩展rails的功能。这下你还有什么理由不去使用它呢?
当然,rails也不是万能的,肯定存在不适应的情况,我个人最反对的就是绝对化,但是对我们这个小项目来说,用rails开发的感觉,真是一个爽。如果必须多说一些的话,那只能是:自从用了rails,牙好,胃口就好,身体倍棒,吃嘛嘛香,他好我也好~~~
------------------------------华丽的分割线-----------------------------------------------------
两天下来,我们也欠了不少技术债,如果不尽早解决,总有一天会死在自己手上。
1.部署
大大告诉我,从项目的第一天就要开始考虑如何部署,并且最好能持续部署,试想你完成所有的功能后,部署环节却发生了问题,导致产品无法上线,你好意思和客户收钱么?如果能做到持续部署,比如1周部署一次,减轻部署压力的同时缩短产品反馈周期,无疑对应对客户的需求变化以及产品的策略调整都是类似满管的提升。
说到这,对于一开始就放弃考虑部署环节的我们,只能羞愧的捂脸啊,有木有!!!
2.测试覆盖率
作为一个敏捷咨询公司的员工,写代码没有测试是会影响仕途的,好的测试能帮你及时发现在上线之后才出现的“八阿哥”,让你更有信心的面对产品发布等等。
说道这,对于由于不会在rails下写测试而进行裸奔(就是没有进行测试驱动开发)的我们,只能羞愧的捂脸啊,有木有!!!
3.内存数据库
由于rails自带默认的内存数据库,我们也就偷了个懒,到现在也没有像样的数据库。不过rails的数据库机制能方便的对使用的数据库进行配置,所以切换数据库方面也就没有多大的担心。再加上蛋蛋提到他二半夜给客户通过log修复内存数据库,想想就害怕。。。
说到这,对于不了解rails数据库相关知识的我们,只能羞愧的捂脸啊,有木有!!!
4.前台优化
在这个就像也怕巷子深的时代,一个网站的前台就像美女的脸一样重要。前台不给力,功能多牛逼也不顶用呀。用户体验要提高呀,有木有!!!
说到这,对于前台技术匮乏的我们,只能羞愧的捂脸啊,有木有!!!
总之,对于欠下这么多技术债的我们,只能羞愧的捂脸啊,有木有!!!