美文网首页
软件开发规范

软件开发规范

作者: MaxWellPro | 来源:发表于2017-04-13 10:50 被阅读284次

    代码规范的重要性

    • 促进团队合作,提高代码的可读性;
    • 有助于 Code Review ;
    • 可以降低 Bug 出现的概率;

    Model命名

    响应

    • RespMetaModel

    请求

    • ReqBaseModel

    组件命名

    eg:QYTMapHelper

    包括但不限于:

    • Helper
    • Manager
    • Meter
    • View (同样还有Picker Browser Sheet Player AlertView Menu等)
    • Uploader
    • Kit
    • Editor
    • SDK
    • Logger
    • Mediator
    • ···

    ViewController命名

    eg:QYTBaseViewController

    组织

    QuanYanTech

    签名

    Created by MaxWellPro on 16/11/14.
    

    代码规范

    • 代码块

    建议多使用代码块,可以增加代码的阅读性。

    /**
     *  初始化根视图
     */
    [self initWindow];
    
    /**
     *  初始化请求框架设置
     */
    [self initNetWorkManager];
    
    /**
     *  初始化图片缓存
     */
    [self initSDWebImageManager];
    
    • import VS include
      使用 #import 引入Ojbective-C和Ojbective-C++头文件,使用 #include 引入C和C++头
    • 指针“* =”号的位置
    UIImageView *imageView = [[UIImageView alloc] init]; 
    
    • 变量
    NSString *_varName;
    
    • 宏定义
    // app 信息
    #define APP_VERSION                         [[[NSBundle mainBundle] infoDictionary] valueForKey:@"CFBundleShortVersionString"]
    #define APP_BUILD_VERSION                   [[[NSBundle mainBundle] infoDictionary] valueForKey:@"CFBundleVersion"]
    #define APP_DISPLAY_NAME                    [[[NSBundle mainBundle] infoDictionary] valueForKey:@"CFBundleDisplayName"]
    
    // 系统控件默认高度
    #define StatusBarHeight        (20.f)
    #define TopBarHeight           (44.f)
    #define BottomBarHeight        (49.f)
    #define CellDefaultHeight      (44.f)
    #define EnglishKeyboardHeight  (216.f)
    #define ChineseKeyboardHeight  (252.f)
    
    // 加载图片
    #define PNGIMAGE(NAME)          [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:(NAME) ofType:@"png"]]
    #define JPGIMAGE(NAME)          [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:(NAME) ofType:@"jpg"]]
    #define IMAGE(NAME, EXT)        [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:(NAME) ofType:(EXT)]]
    
    // 颜色(RGB)
    #define RGBCOLOR(r, g, b)       [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:1]
    #define RGBACOLOR(r, g, b, a)   [UIColor colorWithRed:(r)/255.0f green:(g)/255.0f blue:(b)/255.0f alpha:(a)]
    // 随机颜色
    #define RANDOM_UICOLOR     [UIColor colorWithRed:arc4random_uniform(256) / 255.0 green:arc4random_uniform(256) / 255.0 blue:arc4random_uniform(256) / 255.0 alpha:1]
    
    // View 圆角和加边框
    #define ViewBorderRadius(View, Radius, Width, Color)\
    \
    [View.layer setCornerRadius:(Radius)];\
    [View.layer setMasksToBounds:YES];\
    [View.layer setBorderWidth:(Width)];\
    [View.layer setBorderColor:[Color CGColor]]
    
    // View 圆角
    #define ViewRadius(View, Radius)\
    \
    [View.layer setCornerRadius:(Radius)];\
    [View.layer setMasksToBounds:YES]
    
    
    • 常量
    static NSString * const kURLProtocolHandledKey = @"BF_URLProtocolHandledKey";
    
    • 属性
    @property (nonatomic, copy) NSString *aString; 
    
    • 成员变量使用 @private。如:
    @interface MyClass : NSObject { 
    @private 
        id _myInstanceVariable; 
    } 
    
    • 在 - OR + 和返回值之间留1个空格,方法名和第一个参数间不留空格,并且{接在方法后边需要留一个空格。如:
    - (void)doSomethingWithString:(NSString *)theString { 
    ... 
    } 
    
    • 当参数过长时,每个参数占用一行,以冒号对齐。如:
    - (void)doSomethingWith:(GTMFoo *)theFoo 
                       rect:(NSRect)theRect 
                   interval:(float)theInterval { 
    ... 
    } 
    
    • dealloc
    - (void)dealloc {
        NSLog(@"- [%@ dealloc]",[self class]);
    }
    
    • 待办事项
     TODO:// or FIXME://
    
    • 换行
      尽量不要出现2行以上的换行,合理换行。
    self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped];
    [self.tableView setDataSource:self];
    [self.tableView setDelegate:self];
    [self.tableView setShowsVerticalScrollIndicator:NO];
    [self.tableView setShowsHorizontalScrollIndicator:NO];
    [self.view addSubview:self.tableView];
    
    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.top.equalTo(@0);
         make.left.equalTo(@0);
         make.bottom.equalTo(@-49);
         make.right.equalTo(@0);
    }];
    
    MJWeakSelf
    self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        [weakSelf getDataWithHeaderRefresh];
    }];
    
    • 方法的调用

    调用方法沿用声明方法的习惯。例外:如果给定源文件已经遵从某种习惯,继续遵从那种习惯。

    所有参数应在同一行中,或者每个参数占用一行且使用冒号对齐。如:

    [myObject doFooWith:arg1 name:arg2 error:arg3]; 
    

    [myObject doFooWith:arg1 
                   name:arg2 
                  error:arg3]; 
    
    • mrak快速查找代码
    #pragma mark – Life Cycle
    
    #pragma mark - Events
    
    #pragma mark – Private Methods
    
    #pragma mark - UITextFieldDelegate
    
    #pragma mark - UITableViewDataSource
    
    #pragma mark - UITableViewDelegate
    
    #pragma mark - Custom Delegates
    
    #pragma mark – Getters and Setters
    
    • 懒加载
      什么时候用,什么时候初始化,更智能更节能
    - (UILabel *)label {
        if (!_label) {
            _label = [[UILabel alloc] init];
            _label.text = @"1234";
            _label.font = [UIFont systemFontOfSize:12];
            ... ...
        }
        return _label;
    }
    

    命名

    • 类名(及其category name 和 protocal name)的首字母大写,写使用首字母大写的形式
    • 分割单词
    • 在面向多应用的代码中,推荐使用前缀。如:QYTSendMessage

    参考:CodingGuidelines

    相关文章

      网友评论

          本文标题:软件开发规范

          本文链接:https://www.haomeiwen.com/subject/myfbattx.html