统一项目编码风格之必要性与实现

一、统一代码风格之必要性

不同的人由于编码经验和编码偏好相同,项目中同一个功能的实现代码可能千差万别。往往在一个项目开发过程中,不同的人会负责不同的模块,如果每个人都很随意地按照自己的偏好编写自己部分的代码,不考虑其可阅读性和可维护性,那么如果某天该模块的同学休假或者离职,对于其他接手维护的人来说,将是巨大的灾难。并且让整个项目面临风险。如果项目中代码风格统一,接手人员只需学习了解这一种风格即可触类旁通,剩下的只是产品逻辑;如果项目的N个人N种风格,那么接手人员将学习N种代码风格后,再学习产品逻辑,增加了接手难度。
统一的代码风格有以下几个好处:

  • 让新接手的人易于阅读,快速入手;
  • 让项目更加易于维护;
  • 可以减少一些简单代码的注释;
  • 提高合作效率;

二、统一代码风格之实现

  • 代码分段
    将具有相同或相似功能的代码放在一起,并添加分段标注。在iOS开发中,可以通过如下形式添加分段:

#pragma mark - Private Methods

其中“#pragma mark -”为固定格式,“Private Methods”该分段表示的含义,此处说明该分段中的皆为私有方法。

  • 代码分段,并且指定一定的顺序
    如果代码分段的顺序混乱,也不利于其他同事快速找到相应的方法。指定一定的顺序,形成共识,有利于提高协作效率;
    一般情况,在iOS开发中的一个VC文件中,可以通过以下顺序进行分段:
#pragma mark - Initialize Methods
#pragma mark - Life Cycle
#pragma mark - Super Methods
#pragma mark - Private Methods
#pragma mark - Public Methods
#pragma mark - Event
#pragma mark - <<#Delegate#>>
#pragma mark - Property
#pragma mark - Dealloc
  • 对视图的统一处理
    在iOS开发中,每个页面都不可避免的会有很多的视图操作,页面越复杂,视图操作越多。几乎页面上添加每一个视图操作都有:addView、add
    Constraints,addAction等操作。如果这些视图操作随意放置在不同的位置,对于来维护的人来说,是很难理清响应的逻辑的。此时我们可以把所有视图的相操作都放置在同一个方法中,下面把多个视图的操作都归集放在setupSubViews,setupConstraints,setUpEvent三个方法中。不管有多复杂的页面,在这三个方法中可以迅速找到对应的方法和逻辑,如下代码所示:
- (void)setupSubViews {
      [self addSubview:self.containerView];
      [self addSubview:self.noteImageView];
      [self addSubview:self.topBarView];
      [self addSubview:self.bottomView];
}
- (void)setupConstraints {
     [self.topBarView mas_makeConstraints:^(MASConstraintMaker *make) {
}];
    [self.containerView mas_makeConstraints:^(MASConstraintMaker *make) {
}];

    [self.noteImageView mas_makeConstraints:^(MASConstraintMaker *make) {
}];

   [self.bottomView mas_makeConstraints:^(MASConstraintMaker *make) {
}];
}
- (void)setUpEvent {
/** 恢复按钮 */
[self.bottomView.restoreBtn addTarget:self action:@selector(restoreImage) forControlEvents:UIControlEventTouchUpInside];
/** 旋转90度按钮 */
[self.bottomView.rotationBtn addTarget:self action:@selector(rotationImage) forControlEvents:UIControlEventTouchUpInside];
/** 删除按钮 */
[self.bottomView.deleteBtn addTarget:self action:@selector(deleteImage) forControlEvents:UIControlEventTouchUpInside];
/** 添加图片按钮 */
[self.bottomView.addImageBtn addTarget:self action:@selector(addImage) forControlEvents:UIControlEventTouchUpInside];
}
  • 使用统一的自定义代码块

Xcode是一个很强大的工具,为我们提供了自定义代码块的功能,对于一些常见的方法、协议、或者固定格式写法,我们都可以自定义成代码块,在项目中需要该段代码时,我们键入少量的代码,Xcode即可以自动补全该代码块的内容。统一的自定义代码块,可以让每一个项目成员在要实现同样的功能时,写出的是完全相同的代码风格,有利于不断的形成共识。关于如何自定义代码块,我们将在下一期专门进行说明。

  • 对导入的头文件进行分段

在一个复杂的文件中,导入的头文件也会很多,对头文件进行分段,也会使代码结构很清晰。可按照以下分段进行:

//System
//VC
//Model
//View
//Helper
  • 抽象提取基类

对于View,VC,Model等不同的模块,最好根据项目的需要能提炼出相应的Base基类,把一些不断重用的方法写到基类中,那么其他人要使用该功能的时候,可以直接调用基类中的方法,这也有利于大家写出的代码相对统一。比如UITableViewCell有对应的UITableViewBaseCell,UIViewController有对应的UIBaseVC,model 有对应的BaseModel。

  • 提炼出Category

OC 作为面向对象的语言。Objective-C 中的 Category 就是对装饰模式的一种具体实现。它的主要作用是在不改变原有类的前提下,动态地给这个类添加一些方法。将需要的方法写到Category中供所有项目成员使用,也能使大家的代码风格更加的统一。

  • 统一合理的代码规范

对于代码规范,一定要开发团队进行评审,大家充分的提出建议,经过讨论后形成一份可操作性强、达成共识的有效规范,这样才能得到有效的实施。

  • Code Review

一家开发规范的公司一定会进行code review,那么在code review的过程中,不仅可以团队成员之间进行相互切磋学习,发现业务代码实现中的问题,更重要的是这是一个团队代码风格进行融合的机会。团队leader组织大家定期地进行code review,是对团队负责,对公司负责,对自己负责的表现。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351