|
| 1 | +# LinkerHand C++ SDK 命名规范改进指南 |
| 2 | + |
| 3 | +## 概述 |
| 4 | + |
| 5 | +本文档描述了 LinkerHand C++ SDK 的命名规范改进,这些改进旨在提高代码一致性、可维护性和可读性。 |
| 6 | + |
| 7 | +## 改进内容 |
| 8 | + |
| 9 | +### 1. 统一命名空间结构 |
| 10 | + |
| 11 | +所有手型号实现类已迁移到统一的 `linkerhand::hand` 命名空间: |
| 12 | + |
| 13 | +**改进前:** |
| 14 | +```cpp |
| 15 | +namespace LinkerHandL10 { |
| 16 | + class LinkerHand : public linkerhand::hand::IHand { ... }; |
| 17 | +} |
| 18 | +``` |
| 19 | +
|
| 20 | +**改进后:** |
| 21 | +```cpp |
| 22 | +namespace linkerhand { |
| 23 | +namespace hand { |
| 24 | + class L10Hand : public IHand { ... }; |
| 25 | +} // namespace hand |
| 26 | +} // namespace linkerhand |
| 27 | +``` |
| 28 | + |
| 29 | +### 2. 类名改进 |
| 30 | + |
| 31 | +不同型号的手现在使用不同的类名,便于区分: |
| 32 | + |
| 33 | +| 型号 | 旧类名 | 新类名 | 命名空间 | |
| 34 | +|------|--------|--------|---------| |
| 35 | +| L6/O6 | `LinkerHandL6::LinkerHand` | `linkerhand::hand::L6Hand` | `linkerhand::hand` | |
| 36 | +| L7 | `LinkerHandL7::LinkerHand` | `linkerhand::hand::L7Hand` | `linkerhand::hand` | |
| 37 | +| L10 | `LinkerHandL10::LinkerHand` | `linkerhand::hand::L10Hand` | `linkerhand::hand` | |
| 38 | +| L20 | `LinkerHandL20::LinkerHand` | `linkerhand::hand::L20Hand` | `linkerhand::hand` | |
| 39 | +| L25/L21 | `LinkerHandL25::LinkerHand` | `linkerhand::hand::L25Hand` | `linkerhand::hand` | |
| 40 | +| Modbus L10 | `ModbusLinkerHandL10::LinkerHand` | `linkerhand::hand::ModbusL10Hand` | `linkerhand::hand` | |
| 41 | + |
| 42 | +### 3. 帧属性枚举重命名 |
| 43 | + |
| 44 | +各型号的帧属性枚举已重命名,使用更清晰的命名: |
| 45 | + |
| 46 | +| 型号 | 旧枚举名 | 新枚举名 | |
| 47 | +|------|---------|---------| |
| 48 | +| L6/O6 | `LinkerHandL6::FRAME_PROPERTY` | `linkerhand::hand::L6FrameProperty` | |
| 49 | +| L7 | `LinkerHandL7::FRAME_PROPERTY` | `linkerhand::hand::L7FrameProperty` | |
| 50 | +| L10 | `LinkerHandL10::FRAME_PROPERTY` | `linkerhand::hand::L10FrameProperty` | |
| 51 | +| L20 | `LinkerHandL20::FRAME_PROPERTY` | `linkerhand::hand::L20FrameProperty` | |
| 52 | +| L25/L21 | `LinkerHandL25::FRAME_PROPERTY` | `linkerhand::hand::L25FrameProperty` | |
| 53 | + |
| 54 | +### 4. 参数命名修正 |
| 55 | + |
| 56 | +修正了错误的参数命名: |
| 57 | + |
| 58 | +**改进前(错误)**: |
| 59 | +```cpp |
| 60 | +LinkerHandApi(const LINKER_HAND &handJoint, ...); |
| 61 | +LINKER_HAND handJoint_; // 这是手型号,不是关节 |
| 62 | +``` |
| 63 | +
|
| 64 | +**改进后(正确)**: |
| 65 | +```cpp |
| 66 | +LinkerHandApi(const LINKER_HAND &handModel, ...); |
| 67 | +LINKER_HAND handModel_; // 手型号(L6, L7, L10, L20, L21, L25 等) |
| 68 | +``` |
| 69 | + |
| 70 | +**说明**: |
| 71 | +- `handJoint` 命名不准确,因为这是手型号(Model),不是关节(Joint) |
| 72 | +- 已统一修正为 `handModel`,更准确地表示手型号 |
| 73 | + |
| 74 | +## 向后兼容性 |
| 75 | + |
| 76 | +为了保持向后兼容,所有旧的命名空间和类名都通过 `using` 别名保留: |
| 77 | + |
| 78 | +```cpp |
| 79 | +// 向后兼容:在旧命名空间中提供别名 |
| 80 | +namespace LinkerHandL10 { |
| 81 | + using FRAME_PROPERTY = linkerhand::hand::L10FrameProperty; |
| 82 | + using LinkerHand = linkerhand::hand::L10Hand; |
| 83 | +} // namespace LinkerHandL10 |
| 84 | +``` |
| 85 | +
|
| 86 | +这意味着现有代码可以继续使用旧的命名,无需立即修改。 |
| 87 | +
|
| 88 | +## 使用示例 |
| 89 | +
|
| 90 | +### 使用新命名(推荐) |
| 91 | +
|
| 92 | +```cpp |
| 93 | +#include "LinkerHandL10.h" |
| 94 | +#include "HandFactory.h" |
| 95 | +
|
| 96 | +// 使用新的命名空间和类名 |
| 97 | +using namespace linkerhand; |
| 98 | +
|
| 99 | +auto hand = factory::HandFactory::createHand( |
| 100 | + LINKER_HAND::L10, |
| 101 | + HAND_TYPE::RIGHT, |
| 102 | + COMM_CAN_0 |
| 103 | +); |
| 104 | +// hand 的类型是 std::unique_ptr<hand::IHand> |
| 105 | +// 实际类型是 hand::L10Hand |
| 106 | +``` |
| 107 | + |
| 108 | +### 使用旧命名(向后兼容) |
| 109 | + |
| 110 | +```cpp |
| 111 | +#include "LinkerHandL10.h" |
| 112 | +#include "HandFactory.h" |
| 113 | + |
| 114 | +// 仍然可以使用旧的命名空间 |
| 115 | +LinkerHandL10::LinkerHand hand(0x27, "can0", 1000000); |
| 116 | +``` |
| 117 | +
|
| 118 | +## 迁移建议 |
| 119 | +
|
| 120 | +### 阶段一:保持兼容(当前) |
| 121 | +
|
| 122 | +- ✅ 所有新命名已实现 |
| 123 | +- ✅ 向后兼容别名已添加 |
| 124 | +- ✅ 现有代码无需修改即可继续工作 |
| 125 | +
|
| 126 | +### 阶段二:逐步迁移(推荐) |
| 127 | +
|
| 128 | +1. **新代码使用新命名**:所有新编写的代码应使用新的命名空间和类名 |
| 129 | +2. **更新文档和示例**:逐步更新文档和示例代码使用新命名 |
| 130 | +3. **代码审查**:在代码审查中鼓励使用新命名 |
| 131 | +
|
| 132 | +### 阶段三:完全迁移(未来) |
| 133 | +
|
| 134 | +在未来版本中,可以考虑: |
| 135 | +- 移除向后兼容别名(需要主版本号升级) |
| 136 | +- 更新所有内部代码使用新命名 |
| 137 | +- 更新所有文档和示例 |
| 138 | +
|
| 139 | +## 优势 |
| 140 | +
|
| 141 | +1. **一致性**:所有型号使用统一的命名空间结构 |
| 142 | +2. **可读性**:类名直接反映型号(`L10Hand` vs `LinkerHand`) |
| 143 | +3. **可维护性**:统一的命名空间便于管理和查找 |
| 144 | +4. **扩展性**:新型号可以轻松添加到同一命名空间 |
| 145 | +
|
| 146 | +## 注意事项 |
| 147 | +
|
| 148 | +1. **工厂类**:`HandFactory` 已更新为使用新类名,但返回类型仍然是 `IHand` 接口 |
| 149 | +2. **头文件**:头文件名暂时保持不变,未来可以考虑重命名 |
| 150 | +3. **枚举**:帧属性枚举已重命名,但枚举值保持不变 |
| 151 | +
|
| 152 | +## 相关文件 |
| 153 | +
|
| 154 | +- `include/LinkerHandL6.h` - L6/O6 型号实现 |
| 155 | +- `include/LinkerHandL7.h` - L7 型号实现 |
| 156 | +- `include/LinkerHandL10.h` - L10 型号实现 |
| 157 | +- `include/LinkerHandL20.h` - L20 型号实现 |
| 158 | +- `include/LinkerHandL25.h` - L25/L21 型号实现 |
| 159 | +- `include/ModbusLinkerHandL10.h` - Modbus L10 型号实现 |
| 160 | +- `include/HandFactory.h` - 工厂类 |
| 161 | +
|
| 162 | +## 版本信息 |
| 163 | +
|
| 164 | +- **改进版本**:1.1.7+ |
| 165 | +- **兼容性**:完全向后兼容 |
| 166 | +
|
0 commit comments