经过这么多天风风雨雨的加班、我........成长了
呼呼。。。。经过1个月的4.0真的感觉到了前所未有的洗礼、因为前三个版本留下的问题,包括所有的业务逻辑代码,这次真的全部写完了,虽然好多欠优化的地方,但是总体感觉,弄完了还是非常爽的!
但是归根结底,这一个月还是没有写几百行代码的,很多时间浪费在了接口和数据上了,简单说就是接口调不通,掉通了数据不对,返回的数据不对,因为 学生端都是以别的模块进行支撑的,所以一个接口调不通,直接就瘫了。。。
那么下面就总结下、4.0项目中遇到的问题和我想的解决方法
问题
1接口(集成发布,影响接口使用)
4.0学生端的接口大部分还OK,也花了一段时间调用,比3.1调用接口容易了很多,这次接口问题主要集中在完结项目这几天,因为到最后大家都集成发布自己的模块,导致一开始好的接口突然就出现了问题、因为后期大家集成出现问题、导致最后调试的时候接口耽误了时间。
2数据
各模块不知道详细的为其他模块提供什么数据、他需要什么数据、从来没有整体连调过,大家在意别人的模块比较少,真没全局观。
4.0比接口更要命的是数据、最重要的是考试系统每个模块都不知道他们为别人提供什么数据,比如试卷做导入的时候、根本就没问过我这边各个题型要什么数据,只是按照他自己想的去做,最后导致导入的数据和我要用的对不上口、当然我也是没有注意到这一点、如果我早点和其他人交流也不会出现这种问题。
从自身的角度看、我注重于我要什么数据,所以每个给我提供接口和数据的人我都找过很多次,而我给后面判分,统计提供什么数据,却没关心过几次(我主动去问过、并且表示你们要什么数据就跟我说,保证满足。。。因为我知道没有数据的痛楚,,),但是后面真没有人找我,顶多有1到2次问了下,没有进行深入讨论,所以导致我后面的计算分数与试卷统计到最后一天又找我要数据、搞定很尴尬。。。
还有就是这次的试卷导入、数据不对、根本原因就是,我要什么数据只有我知道,其他人根本不知道,但是也没人问我,而且最重要的是,学生端没有人跟我一起,除了我没有人知道。
3 人员分配
从1.0 开始就是我一个人在做学生端,虽然2.0调走了,3.0才回来,但是我的代码一直没人动,更没人能接手,从需求到业务逻辑,只有我懂,这是非常危险的,说不好听的,万一哪天我挂了,这个模块至少延期一个月才有进展,所以人员分配上有问题、至少再分个人在学生端。
解决方法
1接口
发布一个稳定的服务、更新的话发布新的服务、等到最后几天,大家都改成新的服务、这样不影响开发
2数据
这个主要是各个模块负责人对自己模块不了解、与相关模块沟通少、还有就是一些基础的数据、如考试的题型详情、字典等、要开项之前弄好、而不是发现了在加数据
3结对编程
这个主要是避免一个模块只有一个人负责、这人实习或者有事、导致严重拖拽进度、除了学生端,感觉其他模块做的都还可以。
编码收获
经过写了这么长的业务逻辑代码,我对于写代码的收获还是特别大的,下面就总结几点
1 站在巨人的肩膀上
一开始,因为抽题,好多要选,随机,排序,计算,的东西,后来发现List都有,而自己写的时候没有想到利用已有的巨人,而是自己写,工作效率,代码执行效率,出错率,都会比用人家写好的方法高出许多。
2 先逻辑,再数据,后注释,代码放最后
小的业务逻辑没什么,像我这种相当庞大的业务逻辑嘛
先做的就是把业务逻辑理清! 并且一定要画图、流程图还是什么图,必须理清!
然后就是数据、这里的数据说的是传参、也就是说整体业务逻辑划分成几块、他们的传参数,还有就是调用接口的传参,调用接口的不止要在接口文档上写好传值和返回值的参数类型和属性,这些都是最基本的,还一定要写一些数据规范,比如我传一个1进去、应该返回int类型的数字5,但是他返回的是int类型的数字6,类型和参数都对,就是数据不对,那也不行!
好了理清了、现在开始写代码?NO,先建立好类、方法、传值返回值、并且最重要的是要写注释!!!注释!!!!!注释!!!!!!注释!!!!!!注释!!!!!!注释!!!!!!注释!!!!!!注释!!!!!!注释!!!!!!注释!!!!!!注释!!!!!!注释!!!!!!注释!!!!!!注释!!!!!!注释!!!!!!谁TMD不写注释就砍死谁!在你抱怨别人的代码不清楚、注释不清楚、和代码对应不上的时候、一定要想想、自己坐到了没有、下面截取一段我的代码。
#region PumpingTest 将题库拼接成HTML放入缓存 chenchen 2015年6月13日10:38:35
/// <summary>
/// 用于查询题库并最终讲转换成HTML的题放到题库里面、第一个学生调用
/// </summary>
/// <param name="strCourseID">课程ID</param>
/// <param name="enExamTemplateDetail">模板ID</param>
//public void PumpingTest(string strCourseID, ViewExamTemplateDetailEntity enExamTemplateDetail)
public void PumpingTest(ExamServiceViewModel enExamServeiceViewModel)
{
//前端工具类、本次用于调取题库
InterfaceAppearanceController interfaceAppearance = new InterfaceAppearanceController();
//用于存放试题
List<List<ExamQuestionBankViewModel>> QuestionsList = new List<List<ExamQuestionBankViewModel>>();
if (enExamServeiceViewModel.TemplateId ==null)
{
//根据试卷查
//传入试卷ID获取试题
QuestionsList = interfaceAppearance.QueryQuestionPaper(enExamServeiceViewModel);
//将模题库入缓存(课程ID,题库,存放30分钟不清缓存)
interfaceAppearance.MemcacheSet(enExamServeiceViewModel.PaperId, QuestionsList, DateTime.Now.AddMinutes(30));
}
else {
//根据模板查
//查询出模板()
List<List<ViewExamTemplateDetailEntity>> templateDetailLists = interfaceAppearance.QueryTemplateDetails(enExamServeiceViewModel);
//将模板存入缓存
interfaceAppearance.MemcacheSet(enExamServeiceViewModel.TemplateId, templateDetailLists, DateTime.Now.AddMinutes(30));
//传入课程ID和模板详情获取试题
QuestionsList = interfaceAppearance.QueryQuestions(enExamServeiceViewModel.CourseId, templateDetailLists);
//将模题库入缓存(课程ID,题库,存放30分钟不清缓存)
interfaceAppearance.MemcacheSet(enExamServeiceViewModel.CourseId, QuestionsList, DateTime.Now.AddMinutes(30));
}
//调用进行HTML编译
TransformationHTMLController transformationHTML = new TransformationHTMLController();
//将题库和题库转换的HTML存入缓存、传入题库
transformationHTML.TransformationHTML(QuestionsList);
}
#endregion
看到了吧!!!!一定至少要这样才可以!不写注释的都去死吧!233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333
好了!你已经理清需求,逻辑,并且深入了解传值、每个类,每个方法都干什么、都有非常详细的注释,那么就差代码了,其实这时候写的代码就分3类了
1 外观型代码,也就是调用A、B、C、……多个类来实现功能、类似设计模式中的外观模式。
2 策略型代码,这个类主要就是完成一个任务!或者用一个算法解决一个问题,特别有针对性、而且解决问题的形式和策略多样、类似于设计模式的策略模式、继承抽象类、也会有简单工厂NEW类(写之前一定要好好查、一般情况下有巨人已经封装好了!骚年)。
3 调用接口 ,只要是调用其他组件或者项目的接口我都封装到了一个类里,这样便于管理!非常方便、而不是随手一坨、而且要是对调用接口加一些try也非常方便、复用!
4 抽象的代码、什么接口、抽象类,抽象方法,泛型、这类代码往往是宏观战略意义的代码、是最一开始写的、这个代码搞好了、其他的都很好写、这个弄不好、你就等着臃肿不堪吧!、妹子快让肥哥哥,抱抱(づ。◕‿‿◕。)づ、、、、一边去、我喜欢又瘦又快的代码、(ノ`Д)ノ 555555,看了么!妹子不喜欢臃肿的代码、骚年切记、切记。。。。。
好了。。。。好了。。。。。差不多了、其实也没什么、最重要的是调代码要有耐心!一定不要学我一个队友、给他调代码、在我旁边砸键盘、我靠!吓死爹了!哎不对!最近流行这个。。。。吓死宝宝了!嗯嗯!
————————虽然我会敲代码、但不代表我是一个程序员、乔布斯不也会敲代码吗?—————————
——————————————————————chenchen——————————————————