1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239
|
@Component @Slf4j public class NamingConventionBestPractices {
private final NamingConventionEngine namingConventionEngine;
public void demonstrateBestPractices() { log.info("=== 命名规范最佳实践指南 ===");
demonstrateInterfaceNamingBestPractices();
demonstrateDTOVONamingBestPractices();
demonstrateMethodNamingBestPractices();
demonstrateFieldNamingBestPractices();
demonstratePackageNamingBestPractices(); }
private void demonstrateInterfaceNamingBestPractices() { log.info("--- 接口命名最佳实践 ---");
List<String> goodInterfaceNames = Arrays.asList( "UserController", "OrderService", "ProductRepository", "PaymentGateway", "NotificationHandler" );
List<String> badInterfaceNames = Arrays.asList( "Controller1", "Service", "Data", "Manager", "Util" );
log.info("好的接口命名示例: {}", goodInterfaceNames); log.info("不好的接口命名示例: {}", badInterfaceNames);
log.info("接口命名规范建议:"); log.info("1. 使用业务领域名称 + 技术角色后缀"); log.info("2. 避免使用数字、下划线、连字符"); log.info("3. 保持名称简洁但含义明确"); log.info("4. 遵循驼峰命名法"); log.info("5. 避免使用过于通用的词汇"); }
private void demonstrateDTOVONamingBestPractices() { log.info("--- DTO/VO命名最佳实践 ---");
Map<String, List<String>> goodDTOVONames = new HashMap<>(); goodDTOVONames.put("RequestDTO", Arrays.asList( "CreateUserRequestDTO", "UpdateProductRequestDTO", "SearchOrderRequestDTO" )); goodDTOVONames.put("ResponseVO", Arrays.asList( "UserResponseVO", "ProductListResponseVO", "OrderDetailResponseVO" )); goodDTOVONames.put("BusinessBO", Arrays.asList( "UserBO", "ProductBO", "OrderBO" )); goodDTOVONames.put("QueryQO", Arrays.asList( "UserQueryQO", "ProductQueryQO", "OrderQueryQO" ));
List<String> badDTOVONames = Arrays.asList( "DTO", "VO", "Data", "Request", "Response" );
log.info("好的DTO/VO命名示例: {}", goodDTOVONames); log.info("不好的DTO/VO命名示例: {}", badDTOVONames);
log.info("DTO/VO命名规范建议:"); log.info("1. 使用业务名称 + 类型后缀"); log.info("2. RequestDTO用于接收请求数据"); log.info("3. ResponseVO用于返回响应数据"); log.info("4. BO用于业务逻辑处理"); log.info("5. QO用于查询条件封装"); }
private void demonstrateMethodNamingBestPractices() { log.info("--- 方法命名最佳实践 ---");
Map<OperationType, List<String>> goodMethodNames = new HashMap<>(); goodMethodNames.put(OperationType.CREATE, Arrays.asList( "createUser", "addProduct", "registerAccount" )); goodMethodNames.put(OperationType.READ, Arrays.asList( "getUser", "findProduct", "queryOrder" )); goodMethodNames.put(OperationType.UPDATE, Arrays.asList( "updateUser", "modifyProduct", "changeOrderStatus" )); goodMethodNames.put(OperationType.DELETE, Arrays.asList( "deleteUser", "removeProduct", "cancelOrder" ));
List<String> badMethodNames = Arrays.asList( "do", "process", "handle", "execute", "run" );
log.info("好的方法命名示例: {}", goodMethodNames); log.info("不好的方法命名示例: {}", badMethodNames);
log.info("方法命名规范建议:"); log.info("1. 使用动词 + 名词的组合"); log.info("2. 动词要准确表达操作类型"); log.info("3. 名词要清晰表达操作对象"); log.info("4. 避免使用过于通用的动词"); log.info("5. 保持方法名简洁但含义明确"); }
private void demonstrateFieldNamingBestPractices() { log.info("--- 字段命名最佳实践 ---");
List<String> goodFieldNames = Arrays.asList( "userId", "userName", "emailAddress", "createTime", "isActive" );
List<String> badFieldNames = Arrays.asList( "id", "name", "data", "flag", "temp" );
log.info("好的字段命名示例: {}", goodFieldNames); log.info("不好的字段命名示例: {}", badFieldNames);
log.info("字段命名规范建议:"); log.info("1. 使用有意义的名称"); log.info("2. 避免使用缩写"); log.info("3. 布尔字段使用is/has/can等前缀"); log.info("4. 时间字段使用Time/Date后缀"); log.info("5. 保持字段名简洁但含义明确"); }
private void demonstratePackageNamingBestPractices() { log.info("--- 包命名最佳实践 ---");
List<String> goodPackageNames = Arrays.asList( "com.company.user.controller", "com.company.user.service", "com.company.user.repository", "com.company.user.dto", "com.company.user.vo" );
List<String> badPackageNames = Arrays.asList( "com.company.controller", "com.company.service", "com.company.data", "com.company.util", "com.company.common" );
log.info("好的包命名示例: {}", goodPackageNames); log.info("不好的包命名示例: {}", badPackageNames);
log.info("包命名规范建议:"); log.info("1. 使用反向域名命名"); log.info("2. 按业务模块组织包结构"); log.info("3. 按技术分层组织包结构"); log.info("4. 避免使用过于通用的包名"); log.info("5. 保持包名简洁但含义明确"); } }
|