83 代码规范

一,编程规约
1.命名规范
不能以美元或下划线符号开始或结束;
不能有英文和拼音混合;
类–UpperCameCase, DO/BO/DTO/VO/AO/PO/UID等除外;
方法名/参数名/成员变量名使用lowerCamelCase;
常量命名全部大写,单词间下划线隔开;
抽象类命名使用Abstract或Base开头;
异常类命名使用Exception结尾;测试类命名以要测试的类的名称开始,以Test结尾;
POJO类中布尔类型的变量,都不要加is前缀,否则部分框架解析会引起序列化错误;
包名统一使用小写,点分隔符之间有且仅有一个自然语义的英文单词,包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式;
杜绝不规范缩写;尽量使用完整单词组合表达其意;
枚举以Enum后缀,成员名称须全部大写;
在这里插入图片描述
不允许使用任何魔法值(即未经预先定义的常量)直接出现在代码中;
如:String key=“wanghuijie” + name;
在Long或long赋值时,数值后使用大写的L。小写容易和数字1造成混淆;
if/for/while/switch/do等保留字与括号之间必须加空格;
任何二目,三目运算符左右两边都要加 一个空格;
采用 4个空格缩进,禁止使用tab字符;
在这里插入图片描述
避免通过一个类的对象引用访问此类的警惕变量或静态方法,无畏增加编译器解析成本,直接用类名访问即可;
相同参数类型,相同业务含义,才可以使用java的可变参数,避免使用Object,可变参数必须放置在参数列表最后。
例如:public void listUsers(String type,Long…ids){}
外部正在调用或者二方库依赖的接口,不允许修改方法签名,避免对接口调用方产生影响,接口过期必须加@Deprecated注解,并说明采用的新接口是什么。
Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用此方法;
所有的相同类型的包装类对象之间值的比较,全部使用equals方法;
定义DO/DTO/VO等POJO类时,不要设置任何属性默认值。
在这里插入图片描述
序列化类新增属性时,不要修改serialVersionUID字段,避免反序列化失败;如果完全不兼容升级,避免反序列化混乱,要修改该值;
构造方法里禁止加入任何业务逻辑,如果有初始化逻辑,放到init方法中;
POJO类必须写toString方法,使用IDE:source-generate toString时,如果继承类另一个POJO类,注意在前面加一下super.toString;
在这里插入图片描述
循环体内字符串的连接方式,使用StringBuilder的append;
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 UDS(Unified Diagnostic Services,统一诊断服务)协议层的实现代码,使用了可维护性较高的架构: ```c++ // UDS.h #ifndef UDS_H #define UDS_H #include <stdint.h> class UDS { public: UDS(); virtual ~UDS(); enum class ErrorCode : uint8_t { NoError = 0x00, InvalidService = 0x11, InvalidSubFunction = 0x12, BusyRepeatRequest = 0x21, ConditionsNotCorrect = 0x22, RequestOutOfRange = 0x31, SecurityAccessDenied = 0x33, InvalidKey = 0x35, ExceededNumberOfAttempts = 0x36, RequiredTimeDelayNotExpired = 0x37, UploadDownloadNotAccepted = 0x70, TransferDataSuspended = 0x71, GeneralProgrammingFailure = 0x72, WrongBlockSequenceCounter = 0x73, RequestCorrectlyReceivedResponsePending = 0x78, SubFunctionNotSupportedInActiveSession = 0x7E, ServiceNotSupportedInActiveSession = 0x7F, ServiceNotSupported = 0x80, ResponseTooLong = 0x81, Busy = 0x82, ConditionsNotCorrectOrRequestSequenceError = 0x83, RoutineNotComplete = 0x84, RequestCorrectlyReceivedResponsePending2 = 0x85, SubFunctionNotSupported = 0x86, IncorrectMessageLengthOrInvalidFormat = 0x87, ResponsePending = 0x78, }; // UDS services ErrorCode requestControl(uint8_t controlType); ErrorCode startRoutine(uint16_t routineId); ErrorCode stopRoutine(uint16_t routineId); ErrorCode requestDownload(uint32_t address, uint32_t length); ErrorCode transferData(uint8_t* data, uint16_t length); ErrorCode requestUpload(uint32_t address, uint32_t length); ErrorCode readDataByIdentifier(uint16_t id, uint8_t* data, uint16_t* length); ErrorCode writeDataByIdentifier(uint16_t id, uint8_t* data, uint16_t length); }; #endif // UDS_H ``` ```c++ // UDS.cpp #include "UDS.h" UDS::UDS() {} UDS::~UDS() {} UDS::ErrorCode UDS::requestControl(uint8_t controlType) { // TODO: implement requestControl return ErrorCode::NoError; } UDS::ErrorCode UDS::startRoutine(uint16_t routineId) { // TODO: implement startRoutine return ErrorCode::NoError; } UDS::ErrorCode UDS::stopRoutine(uint16_t routineId) { // TODO: implement stopRoutine return ErrorCode::NoError; } UDS::ErrorCode UDS::requestDownload(uint32_t address, uint32_t length) { // TODO: implement requestDownload return ErrorCode::NoError; } UDS::ErrorCode UDS::transferData(uint8_t* data, uint16_t length) { // TODO: implement transferData return ErrorCode::NoError; } UDS::ErrorCode UDS::requestUpload(uint32_t address, uint32_t length) { // TODO: implement requestUpload return ErrorCode::NoError; } UDS::ErrorCode UDS::readDataByIdentifier(uint16_t id, uint8_t* data, uint16_t* length) { // TODO: implement readDataByIdentifier return ErrorCode::NoError; } UDS::ErrorCode UDS::writeDataByIdentifier(uint16_t id, uint8_t* data, uint16_t length) { // TODO: implement writeDataByIdentifier return ErrorCode::NoError; } ``` 以上代码中,`UDS` 类定义了 UDS 协议层的各个服务,每个服务都返回一个错误代码(`ErrorCode` 枚举类型)。具体服务的实现留给后续开发者完成。 在实现具体服务时,应该始终遵循 UDS 协议规范和可维护性良好的编程实践。建议使用面向对象的编程方法,将每个服务实现为一个单独的类方法,这样可以更好地分离各个服务的逻辑,减少出错的可能性。此外,编写详细的注释也是非常重要的,可以帮助其他开发者更好地理解代码并进行维护。 当然,这只是一个简单的示例代码,实际项目中还需要根据具体需求进行适当的修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值