C++产品开发讲座-(二)开发规范
1.采用git管理项目采用cmake管理编译
1.1 git常⽤命令
github/gitee
git add
git commit
git pull
git rebase
1.2 cmake常⽤
find_package()
include_directories()
link_directories()
aux_source_directory()
add_executable()/add_library()
target_link_libraries()
2. 文件结构
3rdparty 存放第三方的inc和lib
module 存放自己写的各个模块,每个module都需要单独写一个demo示例,表明demo用法
-module1
--demo
module1.cpp
module1.hpp
app 存放上层应用
test 存放测试代码
doc 存放文档
build 存放编译时的临时文件
3. 自顶向下开发
(1)做技术验证可以直接写细节,但做正式产品开发,切忌过早陷入技术细节
(2)先写顶层,main函数与顶层class接⼝(public函数),逐步往下倒逼开发
(3)接⼝先写,但不实现,每次写⼀个层次的代码,完成后再下⼀级细节
(4)对于开发⽅者降低思考⻔槛,类似于写草稿
(5)对于阅读⽅来说降低了阅读⻔槛,⼈脑容量有限,每次阅读同⼀层次的代码逻辑,不频繁跳转容易理解
// main函数定义了调⽤⽅式,倒逼class需要具有哪些public函数
// test_demo_data.cpp
// app_demo_data.cpp
int main()
{
DemoData object;
if (!object.init()) return -1;
if (!object.procPanMeasGFeo()) return -1;
return 0;
}
// main函数倒逼class需要具有哪些函数
class DemoData
{
public:
bool init();
bool procPanMeasGFeo()//先写不实现
{
findROI(); // 等到实现的时候,也是写⼦函数,不直接⼀上来就写底层for循环细
节
fileterROI();
findEdge();
procMeas();
return true;
}
private:
bool findROI();
bool fileterROI();
}
4. 必须配测试
(1)每⼀个重要的class,都需要独立的测试程序
(2)如果模块很少,功能很简单,可以单独集中放到test文件夹下
(3)如果模块多,可以放到模块内部
5. 去耦合
每⼀个模块,知道外⾯的事情越少越好,屏蔽底层细节
class Img2Video//编码类
{
public:
// 不建议,Img2Video就做图像编码,不需要知道有相机这么⼀个Camera的class的存在
// 后⾯把Img2Video挪到其他项⽬,其他相机也能⽤
bool init(Camera* p_camera);
}
去耦合的模块,单独拿出来也可独立编译到其他项目