项目总结一:微孵化项目总结

2024-05-17 05:18
文章标签 总结 项目 孵化

本文主要是介绍项目总结一:微孵化项目总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、项目简介

1、项目基本信息

基本信息详细
项目名称微孵化
平台iOS(兼容iOS 7.0 以上的系统)
V 1.0开发周期2015年8月6日-2015年9月9日(共24天,除去周末,无加班)
项目背景此次项目名称叫做微孵化,是为为中小微企业发展全周期(种子期、初创期、成长期、成熟期)提供数十项专业服务,提供公司注册、场地租赁、人才服务、法务咨询、投融资等多项专业化服务。
主要技术1、广告轮播;2、微信登陆;3、注册短信验证码;4、支付(银联支付、微信支付、支付宝支付);4、分享组件(分享到QQ好友、QQ空间、微信好友、微信朋友圈、新浪微博);5、消息推送
iOS团队4人

2、项目部分截图

这里写图片描述

二、项目总结

1、项目中犯的错

(1)、局部变量、全局变量满天飞

写一个类之前没有全局思考,不知道要定义多少个变量,需要的时候就临时随便定义一个变量,也没有去思考这个变量要定义成全局或者是局部。如果一个类里面的变量很多,到最后我自己也分不清了。我自己都搞不清坨了,更不用说别人能看懂了,所以随意定义全局、局部变量,严重降低了代码的可读性。

正确的做法是:多用局部变量,少用全局变量。能用局部变量的,坚决不用全局变量。如果B方法中需要用A方法中的某个变量,我们可以用参数传递。

(2)方法的命名不能很好的描述此方法的作用

其实,变量名、方法名定义的时候要具有实际的意义,这些概念我们都知道,但是在实际的项目中并没有表现的淋漓尽致,比如下面的例子,我定义了一个按钮的方法,作用是点击按钮报名。

- (void)btnClick:(id)sender
{//此方法的作用是点击按钮报名某个活动
}

这样写,没什么问题,方法名定义也具有实际的意义,很多人都会这样写。但是,我们没有将”定义变量名和方法名具有实际意义“的思想发挥到淋漓尽致。如果一个类里面有多个按钮方法,那其他的按钮方法名你怎么定义呢?看下我这样写,是不是会更好一些?

//点击报名活动
- (void)btnClickSignUp:(id)sender
{//此方法的作用是点击按钮报名某个活动
}

这样写详细的描述了这个按钮点击事件的作用,并且给这个方法添加了一个注释,让别人即使不懂代码的人也知道这个方法的作用。

(3)类中的方法从不进行分类

在做开发的时候,一般需要一个方法,就定义一个方法,从上一直往下写,不会对代码进行整理,如果方法比较多,就会感觉非常的混乱了,这样代码的可读性就很差很差了。

正确的做法:对于一些作用相同的方法,我么可以写在一起,用”#pragma mark
-“进行标注,这样结构会显得很清晰,自己要找对应的方法可以一下子找到,可大大提高代码的可读性。

这里写图片描述

(4)没有采用任何的编程设计思想

有的时候,会把所有的代码都写在viewDidLoad方法中,导致一个方法里面可能有五六百行代码,这种编程的思想是很糟糕的。viewDidLoad中只做一些初始化的动作,比如控件的初始化或者是数据的初始化和数据请求。

正确的做法:设计类采用分层的思想,一个方法只干一件事情,不要所有的代码都写在一个方法里面。不要把所有功能模块全写着一个类中,部分功能模块可以抽象成一个单独的类,一个类中的代码应该少于800行。

下面是一个请求数据的方法,这个里面有四个接口,或许你会把四个请求数据的接口全部写着一个数据请求方法里面,但是这是不合理的。应该采用分层的思想,每个接口单独写一个数据请求的方法,这样大大降低了代码的藕合度,提高了代码的可读性。

#pragma mark - RequestData//待付款
-(void)requestMyOrderList11
{}//已付款
-(void)requestMyOrderList12
{}//待确认
-(void)requestMyOrderList13
{}//已完成
-(void)requestMyOrderList14
{}
(5)为了实现需求不择手段

你有干过为了实现需求不择手段的事情么?不要否认,勇敢点,你肯定干过。为了实现需求而不择手段,是做外包项目的思维。反正我只要把需求做出来了,至于我怎么实现的,那你就管不着了。我曾经犯过很多这样的错误,有一次一个类本来是继承于BaseNavViewController,但是我要用BaseTableViewController里面的方法,我的把本来继承BaseNavViewController的类在头文件中直接改成了继承BaseTableViewController,我为此还很得意,因为我少写了几十行代码。

错误的事例:

#import "BaseNavViewController.h"@interface SignUpViewController : BaseTableViewController
//直接改成继承BaseTableViewController@property (strong, nonatomic) NSString *actId;
@property (strong, nonatomic) NSString *strTitle;@end

虽然这些直接改了继承方式,测试了也没什么问题,但是会存在很大的隐患。你知道为什么你的程序里面老是有些莫名其妙的crash么?就是因为你为了实现需求而不择手段,自己给自己埋下了坑。

(6)慎用“拿来主义”

很大开发人员遇到一个功能需求,老是喜欢去网上百度有没有类似的,然后下载一个直接拿过来用。这种“拿来主义”,可以为开发项目节省时间,但是我觉得还是要慎用“拿来主义”。一方面如果网上下载的东西,如果代码可读性差,那么学习成本很高。一方面网下有时候会不靠谱,可能东西会有bug。另一方面,你老实用别人的东西,自己不写点东西,那么怎么提高你的技术,你无非就是一个“代码搬运工”罢了。在做这个项目的时候,我们需要做一个分享组件。我接过这个需求时,主管说你打算怎么做?我第一反应就是,用友盟分享组件。然后主管问为什么要用友盟分享组件,我说因为它集成了所有的分享,而且很多人在用。最后,主管说不要用第三方的,你自个儿写一个集成分享的。一开始我觉得好难,但是最后写出来了,比友盟的更好用,总共的代码不到一百行。

正确的做法:如果是成熟的第三方的框架,并且自己很熟悉,可以自己改动其中的代码,那便可以引入到项目中来。

2、个人心得体会

做这个项目,让我感觉到实现项目的需求很简单,但是要真的把代码写好,还是不是那么容易的。上面说到的一些东西,其实对于需求的实现无关紧要,都是一些很细节的东西,或者根本就是你认为不重要的东西。但是正是因为你忽略了这些细节,所以你的层次也就停留在了那个水平。编程是一门手艺活,有的干做的粗糙,有的人做的精细,就看你用不用心,有没有注意细节。

前几日看一部很老的功夫片《龙虎门》,一个自称“打遍唐人街无敌手”的双截棍少年,挑战龙虎门的掌门,三秒钟之内被龙虎门的掌门夺走了他手中的双截棍扔到了地上。掌门问少年:你知道怎么握紧你的双截棍么?少年冥思苦想,终于明白了,要握紧双截棍不是靠力气,而是要用心。你的代码为什么写的那么烂?你真的有用心写代码么!!!

此次项目的收获:
1、写代码添加注释、采用分层思想,降低代码藕合度,增加代码可读性;
2、慎用“拿来主义”,用心写代码。

2015年9月 中清龙图

这篇关于项目总结一:微孵化项目总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/995507

相关文章

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

Three.js构建一个 3D 商品展示空间完整实战项目

《Three.js构建一个3D商品展示空间完整实战项目》Three.js是一个强大的JavaScript库,专用于在Web浏览器中创建3D图形,:本文主要介绍Three.js构建一个3D商品展... 目录引言项目核心技术1. 项目架构与资源组织2. 多模型切换、交互热点绑定3. 移动端适配与帧率优化4. 可

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

Spring 依赖注入与循环依赖总结

《Spring依赖注入与循环依赖总结》这篇文章给大家介绍Spring依赖注入与循环依赖总结篇,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Spring 三级缓存解决循环依赖1. 创建UserService原始对象2. 将原始对象包装成工

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

Springboot项目构建时各种依赖详细介绍与依赖关系说明详解

《Springboot项目构建时各种依赖详细介绍与依赖关系说明详解》SpringBoot通过spring-boot-dependencies统一依赖版本管理,spring-boot-starter-w... 目录一、spring-boot-dependencies1.简介2. 内容概览3.核心内容结构4.

在ASP.NET项目中如何使用C#生成二维码

《在ASP.NET项目中如何使用C#生成二维码》二维码(QRCode)已广泛应用于网址分享,支付链接等场景,本文将以ASP.NET为示例,演示如何实现输入文本/URL,生成二维码,在线显示与下载的完整... 目录创建前端页面(Index.cshtml)后端二维码生成逻辑(Index.cshtml.cs)总结

Spring Boot项目如何使用外部application.yml配置文件启动JAR包

《SpringBoot项目如何使用外部application.yml配置文件启动JAR包》文章介绍了SpringBoot项目通过指定外部application.yml配置文件启动JAR包的方法,包括... 目录Spring Boot项目中使用外部application.yml配置文件启动JAR包一、基本原理