API设计法则(QT项目)

好的API的六个特征

API对于程序员来说就相当于GUI对于终端用户。
最小的
每个class有尽量少的成员,有尽量少的class。
完整的
包含预期的功能。
具有清晰简单的语义
尽量让意想不到最少;解决具体的问题;当没必要的时候,不要让解决方案过度通用。
直观的
能让有部分经验的用户不读文档就能开始使用;能让不了解API的程序员理解用API写的代码。
容易记住的
选择一致的,准确的命名规范;使用可是别的模式和概念,避免缩写。
可以让代码易读的

静态多态性

相似的class应该具有相似的API。有时候给一系列相关class提供一个相似的API要比给每一个class提供一个完美的单独的API要好。

特定于C++来说

指针vs引用
对于输出参数,使用指针更易读。
虚拟函数
如果class外没有人会调用这个函数,把这个函数定义为virtual的时候要特别小心。
避免虚拟函数的原因
  • 人们在重新实现虚函数的时候,在里面做些疯狂的事情:发送事件,发出信号,重新进入事件循环,删除对象
  • 不能在不破坏binary compatibility的情况下添加,移动或删除虚函数
  • 不容易重载虚函数
  • 编译器几乎不会优化或者内联虚函数
  • 调用虚函数要比调用普通函数慢2-3倍
  • 虚函数使得class很难以值方式拷贝
没有虚函数的类一般bug更少并且需要更少的维护。
输入参数:常量指针
常函数总是将输入指针设为常指针。
返回值:指针vs常指针
返回常指针更有可能导致过度使用const_cast。

命名艺术
通用命名规则
不要用缩写
命名class
识别一组class,而不是为每一个单独class找到完美的名字
命名枚举类型和值
命名枚举值需要重复至少一个枚举类型名字中的一个单词。
命名布尔型Getters, Setters和属性
对于getter函数
  • 对于形容词,加前缀is
  • 对于形容词应用到复数名词上的,不需要前缀
  • 动词不需要前缀,也不需要使用第三人称(即动词后不加s)
  • 名词不需要前缀(有时候防止误导需要前缀is)
对于setter函数,只要移除getter的前缀is,同时在名字前加set就可以了。
对于属性,只要移除getter的前缀is就可以了。
用枚举类型取代布尔参数



转载于:https://www.cnblogs.com/chuwachen/archive/2011/11/13/3911078.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值