毕业五年,时间说长不长,说短不短。总想留下点什么,奈何时光匆匆,现在正好又面临即将被离职,索性趁这段时间,做个总结。
坐标北京,在目前这家公司工作,前前后后做了有六个项目。每个项目背后,都充满着同事们的辛勤付出,熬夜加班通宵这对我们来说真的是家常便饭,以至于有时候都感觉要坚持不下去了。不过当时觉得趁着还年轻,想要立于不败之地,就得花时间花精力去掌握核心技术,加班熬夜也没什么。可是随着时间的推移,加班还勉强可以,熬夜是真的吃不消了,第二天头都是蒙的,所以奉劝经常加班的程序员,尤其是熬夜的程序员照顾好自己的身体。因为我们挣的钱远远不及我们的身体重要,如果我们的器官有价格,那我们每个人都是百万千万富翁。
下面开始说项目,从我们六个项目陆陆续续的上架以及有一些项目陆陆续续的下架中,都能隐约看出公司主要业务变化进而推断出公司目前整体的发展形势(有些领导不说,但是真的能推断出来一二)。大客户,财大气粗,需求全改,要求全做,我们可以毫无底线说出,你说的我们都能做。小客户,置之不顾,需求有选择的改,要求有选择的做,我们还可以毫无底线的说出,你说的这些需要时间。真的是经济基础决定上层建筑,也决定了我们为客户服务的效率和速度。需求侧改革迫在眉睫,可是公司小,底子薄,融资难,客户少,可不得整天围着客户跑。
无论如何,程序员无论前端还是后台,都需要或多或少的知道业务,这样起码知道自己做的项目处在公司产业链的哪个环节,真的是建议大家都要有大局观,这样做出来的项目才能更加的符合公司的整体理念,更加的符合客户的需求,也能相应的避免代码的多次重构。我们项目大部分的时间都在写功能-重构-写功能-重构中度过,对于不可避免的项目重构,我们代码的健壮性就出来了,尽量的模块化,功能化,严格遵照MVC的设计模式(这真的是肺腑之言,是跳过无数坑,碰到无数要改的需求总结出来),M-model,模型,做好模型该做的事情,基本的数据,存储,甚至是网络请求都可以在模型中完成,V-View,视图,基本的UI界面,基本的控件(系统的还是自定义的)都要熟练掌握,这是基本功,C-Controller控制器,做好控制器该做的事情,把数据和界面完美结合。只要严格按照这个基本逻辑来做,代码至少不会太过于混乱,以后也会更好的维护。
下面就是一个具体的项目诞生所必须经历的几个阶段(也不绝对,大体上这样):
1、需求收集阶段,根据公司整体的发展布局,确定APP的基本功能,基本定位,基本的受众群体,基本的风格样式(产品经理最忙的阶段,构思,布局,画原型,确定各大模块,各大功能);
2、敲定APP的大体框架,风格样式(设计师最忙的阶段,出图,设计APP整体风格,每一个功能更具体的页面,页面布局的属性等等);
3、设计图出来以后,前端(安卓和iOS)根据设计图来严格开发,后端建表存数据,写相应的接口;
4、合理安排开发人员(前端和后台)联调接口,保证项目完成;
5、测试人员在项目规划期充分了解需求,写好测试用例,等项目完成提测时,按要求测试,充分按照测试用例来走,出具测试报告,到达要求的APP可以上线;
6、项目正式上线;
这是整个项目的基本流程,而我作为iOS开发,重点说一下iOS开发所经历的一些阶段,接到开发任务后,我们也需要谋篇布局,多思考,多琢磨,多研究,一定会让我们事半功倍,避免很多弯路。三思而后行真的不是空话,尤其是开发人员,一定要充分理解功能需求后,在动手敲代码,真的能避免重复的做同一样事情。
假设我们已经充分理解了需求,现在就是代码部分,很多设计模式,我比较熟悉的就是MVC设计模式,要严格按照这种设计模式来。一个项目,基本的配置要有,各种基类的创建,包括但不限与UITarBarController、UINavigationController、UIViewController、UICollectionView、UITableView等基类,方便一些基本属性的重复创建,重复代码尽量避免。各种基本宏定义,比如APP所有颜色的宏定义,所有字体大小的宏定义,所有接口的宏定义等,这样方便修改,方便管理。APP启动页的添加,icon的添加,开发者账号等。基本的配置完成之后,正式进入APP,一个APP肯定有一个整体架构,我们做的六个APP大同小异,不过也有差别,以第一格为例,采用的是UITarBarController+UINavigationController模式,后来经过了多次重构,改为了跟控制器模态出UINavigationController,整体push或者pop来实现控制器之间的跳转,以及跳转到指定的控制器(涉及到控制器之间的跳转,多余控制器的移除等);然后就是基本的登录注册忘记密码短信登录等模块,基本上用到的就是基本控件来实现UI界面的搭建以及账号密码的存储(涉及NSUserDefaults个人偏好设置),账号密码的加密问题。现在,开始进入业务模块,大体也有几个步骤,大部分界面,都是数据先行,而数据就需要网络请求了,大部分用的都是post或者get的方式,这里要提一下,所有的接口可以放到宏定义里面,方便后期管理,一个APP最后下来估计三百个左右的接口,网络请求最好也单独写个工具类,那么多地方要写,不用每个都把请求代码写一遍。数据请求下来,需要我们自己处理,自己处理或者第三方都行,JSONModel、YYModel用着都挺方便,人家也都解析好了。数据解析完了之后,最好一些默认值也都放到模型里面处理,比如sku选择默认值,UI界面固定格式的数据,甚至网络请求都能放到模型里面来处理。数据处理好了之后,就可以愉快地处理UI了,UICollectionView、UITableVIew、UIView、UIButton、UITextField、UIImageView、UITextview、WKWebView、UILabel等几乎可以涵盖所有的界面,用一些第三方布局,Masonry,MBProgressHUD,MJRefresh等处理控件的瀑布流布局,极限布局,自动布局等。这样下来,一个项目初具雏形,还需要实现一些具体的技术了,比如,支付功能,定位技术,导航功能,客服聊天,消息推送,以及第三方登录,图片文件的上传下载,发邮件打电话,二维码扫描,视频播放等,到这里几乎算是做完了,每做一个功能模块都要自测,相关功能也要一起测,做完之后,自己还要测一遍,每个功能,功能与功能之间都要测到,然后就能提交测试组测试了,根据测试组提的bug,及时的解决,知道没有bug为止,测试组出具测试报告,iOS以及安卓到指定的市场上传项目等待审核通过即可。
一个项目说着只有这几点,可是实际上的事情比这些只多不少,比如苹果需要开发者账号,账号是不是到期续费等,比如当时我们APP被拒的理由是我们属于金融类APP不能用个人开发者账号上传,然后我就废了很大劲,把个人开发者账号升级为公司开发者账号,中间需要申请邓白氏等很多麻烦事儿,这些事情都要考虑工期,并且有时候只要合理安排时间,这些都是能同步进行的。大体上项目都要通过这些阶段,也不排除有些领导希望快速上一版本,以后不断迭代等,大差不差。
这就是iOS工程师每天做的事情,上班下班加班,循环往复,不知尽头。毕业五年,直到最近即将要被离职,我才意识到时光匆匆,也才意识到需要总结点什么了,我也不知道为什么写了这么多,我只是想写了而已。
网友评论