java代码开发规范

Java项目设计分享(一) Java项目设计 阅读详情
AI摘要

本文详细阐述了Java项目工程结构、代码整洁、命名规则、数据传输对象、Controller-Service-Factory设计模式、异常处理、数据库优化和日志规范。涵盖了模块划分(sdk、biz、api)、代码编写技巧和最佳实践,适合团队遵循的开发指南。

Java代码开发规范

1、工程结构

在这里插入图片描述

工程分为三个module :sdk、biz、api

api依赖biz biz依赖sdk

1.1.api

api功能主要是与外部的交互部分,包括向前端提供的接口,向外部提供的RPC服务的实现等。
包分类
主要包括的package包括但不限于:

在这里插入图片描述

1.2.biz

业务核心部分,承接上下,联通api层与数据库、外部服务等。

在这里插入图片描述

1.3.sdk

对外提供rpc服务的接口、dto以及枚举等,具体实现会放在api层

remote包统一使用 1.0-SNAPSHOT 作为包管理。

remote向外提供的接口一律只增不删不改,等到接口上线之后,确认老接口已经无流量后,才能进行删除。

2、整洁的代码

2.1代码整洁之道

写简洁易懂的代码,推荐阅读《代码整洁之道》

2.2一些需要强调的命名点

2.2.1 DTO

DTO,全称为Data Transfer Object, 顾名思义,只是作为数据参数对象来使用,在我们的系统当中,DTO只作为系统之间RPC调用时传递的对象。在系统内部,例如由上层api层传向下层action层时候,应当转为系统内部的一个领域对象。

2.2.2 一些难以汇聚成一个领域对象的散装参数

对于系统中数据的传递时,有时候一些参数难以用一个领域对象来进行概括的时候,例如一些面向动作的参数

代码块

java

public class DepositReceiveParam {



    private String outBizId;

    private FinanceOutBizTypeEnum financeOutBizTypeEnum;

    /**

     * 收款面向客户与否

     */

    private Boolean isCustomer;

    /**

     * 面向客户的话,关注此字段

     */

    private Integer customerId;

    /**

     * 面向门店的话,关注此字段

     */

    private List<PoiDepositReceiveParam> poiDepositReceiveParams;

    /**

     * 实际支付金额

     */

    private BigDecimal actualPayment;

    /**

     * 支付中心流水号

     */

    private String tradeNo;

    /**

     * 实际支付时间

     */

    private Integer payTime;

    /**

     * 支付方式

     */

    private PlatformEnum platformEnum;

    /**

     * 备注信息

     */

    private String comment;

}

这样一个充值的动作,难以定义其领域对象,因为其是面向过程的。这个时候可以使用Param的命名形式来进行命名。

3、场景case

这里会列举一些典型的场景,以代码的形式具体说明.

3.1 Controller的场景

Controller的用处是与前端进行接口上的交互,总体流程来说就是

请求→ 根据请求获取(改变)数据→ 组装Model → 返回前端

则Controller需要做的事情,就是将这个流程体现出来

一个典型的GET请求

代码块

java


@RequestMapping(value = "getOrder", method = RequestMethod.GET)

public Map<String, Object> getScheme(String orderId) {

    if (StringUtils.isBlank(orderId)) {

        throw new InvalidParamException("orderId不能为空");

    }

    Order order = orderService.getById(orderId);

    OrderModel orderModel = orderFactory.create(order);

    return ResponseTool.success(order);

}

这是一个根据合同id获取对应的方案的接口,则主流程就是

前端用orderId请求
根据orderId去Service层获取方案
将orderDo送入Factory中,组装成前端需要的Model
返回给前端
Controller层的逻辑很简单,主流程很清晰,一眼就能看出来是在做什么。

如果需要传入多个参数,则可以考虑使用一个Model来包装起来,避免太多参数的情况

而Order和OrderModel的区别是什么呢?

3.1.1领域模型与Model的区别

领域模型对应的是一张表,一个业务上的领域。在交易过程中中,Order则就对应的是一个订单,会落地到数据库的Order表中。

然而在与前端交互的过程中,需要呈现给用户的,则不仅仅是一个order所承载的信息。因为对于用户来说,他需要看到自己的订单,也许要看到订单的支付信息,这些额外的信息,就不是由order来承载的,这些额外的信息的获取,也不是一个Controller的主流程所需要关心的部分,所以就会提出来,放在Factory中

3.2 Factory的场景

接着上面说,则一个Order → OrderModel的Factory

OrderFactory

代码块

java


public OrderModel create(Order order) {

 

   OrderModel model = new OrderModel();

    //填充基本信息

    fillBaseInfo(model, order);

    fillPayResult(model);

    fillAddress(model);



    return model;

}

在Factory中,主要的工作就是组装一个Model出来

传入参数一般为一个Domain或者List的形式

同样,需要将主流程提取出来

代码中主流程很容易就能看出来,

填充基本信息
组装支付信息
组装地址信息
返回

对于一些填充的细节,则需要遵守一些效率上的规定,例如不能循环调用远程服务,走批量接口等,不能循环读库等

3.3 Service的场景

Service则代表一次原子操作,例如一次对表的插入,一次更新,一次条件查询等

OrderService

代码块

java

public List<Order> getByUserId(Integer userId) {

    OrderExample example = new OrderExample();

    example.createCriteria().andUserIdEqualTo(userId).andStatusIn(xxxx);

    return orderMapper.selectByExample(example);

}



public void save(Order order) {

    order.setCreateTime(DateUtil.unixTime());

    order.setCreatorId(UserUtils.getUser() == null ? 0 : UserUtils.getUser().getId());

    orderMapper.insertSelective(scheme);

}

3.4 Action的场景

Action则是对一系列原子操作的组合,也是一个完整的业务操作,一次完整的事务,Action也包含业务校验

ModifyTaskClassAction

public void doAction(ModifyTaskParam param) {
        log.info("开始处理修改任务分类");
        TaskClass taskClass = taskClassDao.getById(param.getTargetTask().getTask().getTaskClass());
        validateTaskClassExist(taskClass);
        validateTaskClassExist(taskClass, param.getTargetTask().getTask().getProject());
//        validateIsNotChildTask(taskClass);
        validateIsNotSection(taskClass);
        log.info("修改任务分类校验通过");
        fillTaskClass(param, taskClass);
        resetStatus(param, taskClass);
        transactionSynchronizer.sendEventAfterCommit(buildTaskClassChangeEvent(param, taskClass));
    }

Actioin中,依然传入参数一般为一个领域对象,入参禁止为Model、DTO,model的作用于起于api止于api,在api层接收到了DTO后,应该转为一个系统内部的领域对象来使用

3.5 Remote的场景

RemotePoiServiceWrapper

代码块

java

public Integer getShopIdByPoiId(Integer poiId) {

    try {

        Integer shopId = remoteResvPoiService.getShopIdByPoiId(poiId);

        LOGGER.info("getShopIdByPoiId get shopId={} by poiId={}", shopId, poiId);

        return shopId;

    } catch (Exception e) {

        LOGGER.error("getShopIdByPoiId error get shopId by poiId={}", poiId, e);

        throw new RpcException(e);

    }

}

3.6 Event的场景

这是一个比较特殊的形式,指在程序内发送事件。什么时候应该用Event-Listener来组织代码呢?我觉得主要有两个地方

流程长,分支多,入口点多

这主要就可以参考老sc的上单流程。

录单 → 提交方案 → 确认方案 → 充值 → 声讯复核 → 上线 → 同步阿波罗

这样一个复杂的长链条,每一个流程都有依赖的地方,可能在每一个流程点上停止与开始,这个时候,就可以使用Event的形式来进行组织。

每一个流程都以Event来传递,则任意路口只需要向外发出一个上一流程完成的事件,就可以无缝进行下一个流程。

非主流程

对于一些非主流程的操作,例如产品化后,产品结算的时候,同步写一份数据到点评M3库中,供数据分析使用,而并无其他作为。则其作为产品结算的非主流程,其优先级不高,直接写在一个Action中不太美观,可以拆分为一个Event去处理

3.7 Validator的场景

代码块

Plain Text

@Service

public class PrepayParamValidator {

    private static final Logger LOGGER = LoggerFactory.getLogger(PrepayParamValidator.class);

    public void validate(PrepayParamDTO prepayParamDTO) {

        if (prepayParamDTO.getCustomerId() == null) {

            LOGGER.error("no customer id for param={}", prepayParamDTO);

            throw new InvalidParamExceptoin("无客户id");

        }

        if (StringUtils.isBlank(prepayParamDTO.getTradeNo())) {

            LOGGER.error("no tradeNo for param={}", prepayParamDTO);

            throw new InvalidParamExceptoin("无流水号");

        }

        if (prepayParamDTO.getAmount() == null) {

            LOGGER.error("no amount for param={}", prepayParamDTO);

            throw new InvalidParamExceptoin("无充值金额");

        }

        if (StringUtils.isBlank(prepayParamDTO.getOperator())) {

            LOGGER.error("no Operator for param={}", prepayParamDTO);

            throw new InvalidParamExceptoin("无操作人");

        }

        if (prepayParamDTO.getPlatformEnum() == null) {

            LOGGER.error("no platform for param={}", prepayParamDTO);

            throw new InvalidParamExceptoin("无操作平台");

        }

    }

}

这是一个典型的抛异常形式的validator,在发现某个参数出错之后,直接抛出异常,并带上对应的错误信息。这样相较于返回布尔值的validator来说,所携带的信息量更大。

切记:Validator当中应该只有一个validate方法,不应该出现其他的方法。

4、日志规范

api出入口必须加日志

核心流程(action、manager)必须加日志

外部调用request、response必须加日志

5、异常规范

6、数据库规范

一、基础规范

1.1、命名规范

1.1.1、库名、表名、字段名必须使用小写字母或数字,不可以数字开头。多个单词或数字间用“_”分割,但禁止下划线间只是数字如resv_01_deposit。

        举例:一般形式如resv_deposit;如有数字分表时使用通常如resv_deposit_01。

1.1.2、 库名、表名、字段名禁⽌超过32个字符。须见名知意。不要使用复数。

1.1.3、库名、表名、字段名禁⽌止使⽤用MySQL保留字。常用保留字如desc。

1.1.4、临时库、表名必须以tmp为前缀,并以⽇日期为后缀。

1.1.5、 备份库、表必须以bak为前缀,并以日期为后缀。

1.1.6、索引命名,主键索引使用pk_字段名;唯一索引使用uk_字段名;普通索引使用idx_字段名。

1.2、使用规范

1.2.1、库、表、字段建议加好注释,明确表达其的意思,特别是表及字段。

1.2.2、库中不要保存大数据,如图片、文件。

1.2.3、尽量不在数据库层面做运算,复杂运算移到程序端cpu

1.2.4、拒绝大sql、大的事物、大的批量。

1.2.5、线上连线上、线下连线下环境隔离。

二、库表规范

2.1、库表规范

2.1.1、控制库中表的数量,单库不应该超过百张表。

2.1.2、控制表中数据量,通常上千万数据应考虑分表。

2.1.3、字符集选择:通常采用UTF8,如果支持表情则使用UTF8MB4。

2.1.4、存储引擎的选择InnoDB

        InnoDB:支持事物、支持行级锁可以高并发、5.6以上支持全文索引

        MySAM:mysql默认引擎。不支持事物、支持表级锁不支持行级锁、支持全文索引。

2.1.5、完整性

2.1.5.1、建立表的实体完整性。

          每个表要都含有主键。

2.1.5.2、不建议建立参照完整性,即外键。

           参照完整性父子表间的完整性约束,导致父子表操作相互影响带来较大的维护代价降低了可用性。

2.1.5.3、不建议用户定义完整性。

          不便于修改维护,可以在业务上实现。

2.1.6、慎用触发器。

        触发器存在较大的性能开销、触发器多级触发也不好控制维护。也非常容易被遗忘。

2.1.7、关于范式根据情况而定,没有正确必须与否。需要则适当冗余以提高性能。

       注意点:冗余的字段应该是不易变的字段否则难于维护一致

2.1.8、一表一实体。意义明确也方便扩展。

2.1.9、表根据情况可以预留字段。因为大表新加字段比较困难。

三、字段规范

3.1、选择合适的字段类型。定义字段考虑:选择正确的数据类型; 选择合适的精度。

3.1.1、更小的数据类型。更少的空间、cpu、缓存能够带来更好的性能。

3.1.2、越简单越好。能用数值型的就不要用字符型的。如数值比较要比字符比较性能好。

3.2、数值型

3.2.1、正整数采用无符号整数。避免负数、同时扩大了范围。

3.2.2、小数使用decimal,decimal是精确的小数。而float和double是非精确的可以用于近似值存在精度损失的问题。

3.3.、日期型

     统一使用unix时间戳。int存储。时间戳不怕时区的问题。int数值型计算等性能也更好。

3.4、字符型

3.4.1、char用于存储固定长度字符。如果长度固定如保存md5可以考虑使用性能要好于varchar。

3.4.2、varchar是不固定长度字符。5.0.3之前的版本只可以保存255个,之后最大存储65535即63K的内容。varchar会用1字节或2字节存储字符串的长度。varchar(n<=255)实际占用n+1否则占用n+2个。

3.4.3、避免使用text和blob类型的。占用空间大;不能检索完整长度也不能排序使用索引。如果需要拆出到单独的表来存储。

3.5、逻辑是非的使用is_xxx的表示。采用unsigned tinyint存储。

3.6、字段避免使用NULL。特别是要索引的字段,因为null字段索引需要额外空间处理、不能使用复核索引。

3.7、不允许使用enum。插入非法值时会插入null。

四、索引规范

4.1、基本规范

4.1.1、不能过多,单表5个。过多对插入、更新带来过多性能开销。

4.1.2、组合索引字段不超过5个。

4.1.3、对字符串建立前缀索引。mysql从字符串左端开始处理字符串。前缀满足区分度情况下使索引边的更小,可以更多的放到内存减少IO等。但不能order by。所以不要对数值型建立前缀索引。

4.1.4、不在索引列上做计算。不能使用索引导致全表扫描。

4.1.5、禁止使用做模糊或全模糊匹配导致不能使用索引。可以支持xxx%的模糊查询。

4.1.6、组合索引要注意最左比配原则。区分度高的字段在左边。

4.1.7、不要对选择度低的字段建立索引。选择度=非重复行数|总数 ,越高越好。

4.1.8、避免索引的重复索引

4.1.9、避免冗余的索引

4.1.10、利用覆盖索引。

      覆盖索引:包含所有满足需要查询数据的索引叫覆盖索引。mysql使用b-tree索引来覆盖查询使用where中的列使用到索引且满足最左前缀,同时返回的列也在索引中。

4.2、主键索引

   innodb对主键建立聚簇索引。其他索引属于辅助索引,期内保存着主键。辅助索引获取到数据需要一次辅助索引查询还需要一次主键索引得到数据。

4.2.1、必须有主键。不然也会默认有。

4.2.2、主键建议选择自增的。或者外部的方式生成数值型的主键。

4.2.3、不用字符类型做主键。字符串较长导致辅助索引较大。

4.2.4、主键索引不要更新。否则导致辅助索引的更新。

4.3、不使用外键索引。参照完整性做父子表间的完整性约束,导致父子表操作相互影响带来较大的维护代价降低了可用性。

五、SQL规范

5.0、基础规范

5.0.1、拒绝大的SQL。大的SQL可以进行拆分。大的SQL对资源利用率低。多个小sql缓存命中率高、利用多CPU、如有锁减小锁的粒度。

5.0.2、拒绝大的事务。与事务无关的操作不要放在事务内。保持事务短小。

5.0.3、不使用存储过程。存储过程难于调试扩展也没有移植性。

5.0.4、减少使用运存函数。

5.0.5、高并发数据库避免join

5.0.6、使用预编译语句。比传递sql更高效。一次解析多次使用。避免sql注入。

5.1、select语句优化

5.1.1、查询需要的列。避免select * 的方式。select * 基本上不能使用到覆盖索引、返回多余的数据增加IO、网络、CPU等资源、

5.1.2、不要使用count(列名/常数)代替count()。count()是标准统计行数语法,统计与null无关。count(列名/常数)不会统计null列

5.1.3、count(distinct 列)统计非null得非重复行数。count(distinct 列1,列2)如果一列为null,另一列值不同也是0。

5.1.4、注意sum类聚合函数NPE问题。如果为null sum返回的是null。

5.2、where优化

5.2.1、使用ISNULL()判断是否为null值。NULL与任何值的比较都为NULL。

5.2.2、in 操作控制数量,建议1000个以内或更少。

5.2.3、同字段or操作改为in操作。or是O(n),in是O(logn);不同字段的or可以使用unio

5.2.4、保持一个range查询。多个范围查询对索引利用率不高。

5.2.5、多个is null操作索引利用率也不高

5.2.6、同数据类型间进行比较,避免隐式的类型转换。

5.2.7、避免使用负向查询。not in 、not like、!= 等等。

5.3、order by优化

5.3.1、order by利用索引前提是where和order by 条件要符合最左前缀条件同时where语句中的条件是等值条件。

5.4.、group by优化

     group by是分组+排序的事项方式

5.4.1、group by如果不需要排序可是指定order by null

5.4.2、使用索引要满足最左前缀

5.5.、limit优化

limit 10000,10实现方式是查询出10010行数据并丢弃前10000行数据

5.5.1、避免limit获取大量数据。需要则进行一定的优化。

如可以先查询出ID,在用in操作。如果有连续性则使用范围查询。

5.6、join优化

mysql join算法使用的是nested loop join算法,通过驱动表的结果集作为循环数据的基础同下一张表进行循环过滤得到结果。

5.6.1、避免join,更要避免大表的join。

5.6.2、小表驱动大表进行查询。查询的列最好要命中index。

5.6.3、不需要去重则使用union all替代union。union有去重开销。

5.7、更新操作优化

5.7.1、大批量更新操作避免高峰期

5.7.2、大批量更细操作打散。避免同步的延迟等。

六、程序事务配置规范

6.1、事务建议rollback for=exception

6.2、业务数据库读写master。避免不同步带来的问题。如果读写分离了则不能更新完立即查询。

13 指挥AI写Java后端业务代码,贴合企业开发规范 本文为《30天掌控AI编程:从指令到落地,手把手教你指挥AI写代码》系列第十三篇,继续第三阶段多场景实战。本篇聚焦**企业级Java后端业务代码**生成,贯彻“零语法、零底层积累”核心,通过结构化指令精准指挥AI产出符合阿里开发规范、适配Spring Boot生态的后端代码。文章拆解企业最常见的**用户注册、登录、数据增删改查**三大业务场景,提供可直接照搬的指令模板、AI输出样例与运行校验方案,零基础也能快速生成工程化Java后端代码,告别死记硬背复杂语法、框架整合与设计模式,高效掌握AI时代后端开发核心 阅读详情

相关推荐

阿里巴巴Java开发规范:提升代码质量与专业素养

在软件开发过程中,遵循一套统一的编码规范对于提高代码的可读性、可维护性和协作效率至关重要。阿里巴巴作为大型电商平台的代表,其Java开发规范得到了业界的广泛认可和应用。Java集合框架为处理对象集合提供了一套性能优化且类型安全的接口和类。最常用的集合类可以分为以下几类:List:有序集合,允许重复元素。Set:不允许重复元素的集合。Map:存储键值对的集合。

weixin_42126677的博客 532

自动代码生成器设计-基于spring的增删改查后端项目结构分析

作为一个低级后端人员,观念有些陈旧,不喜勿喷。 作为成熟的主程序员,我们必须将代码分为:可以复用的核心代码和基于业务的非核心代码。核心代码包括:具有特殊功能的服务:短信验证、人机验证、文件处理、word/excel等数据解析等。以往我们认为这是一个一个的技术点,但是为了不重复造轮子我们可以将这些统一作为核心代码进行维护。与之相反,对于客户要求而变化、如实体、业务对象等就属于非核心代码。 为了保证核心代码的延续性,稳定性、可维护性。我们需要对这些代码单独立项或者分包进行管理。这里我采用设立maven mo

wenyi133的博客 526

别再死记硬背了!用一张时序图彻底搞懂Setup和Hold检查的本质

本文深入解析数字IC设计中的Setup和Hold时序检查原理,通过波形图直观展示数据在触发器间的传递过程。详细讲解Setup检查为何关注前一周期的数据,Hold检查为何关注同一周期的数据,并提供实际设计中的考量因素和修复策略,帮助工程师彻底理解时序检查的本质。

weixin_29927965的博客 364

Spring学习-Spring项目规范

一.分层规范概述 一个常见的基于 Spring 搭建起来的后端服务大体如下: 在当前工程中,现在除了启动类和配置文件,目前还没有什么功能。从工程的角度上来看,需要构建好一个分层体系,来承载我们的业务 二.分层规范视图 三. API 层 1.API 层开发视图 2.API 层主要承接前端请求,对外提供的协议主要包括 Http 和 Thrift 两大类协议,这里先以 Http 接口为例,介绍 API 层的设计 四.Biz 层 1.Biz 层开发视图 2. Biz

qq_48772498的博客 1353

运维与软件实施课表

运维与软件实施课表 课程 章节编号 章节 课程地址 软件及操作系统基础 ch01 软件及操作系统基础01 实施、运维工程师基本技能:https://blog.youkuaiyun.com/qq_28189423/article/details/82700539 老毛桃制作winPE镜像:https://blog.youkuaiyun.com/qq_2818942...

Mr.O~的博客 1万+

arduino esp8266_Arduino传感器教程 第22章ESP8266 控制 5V 继电器

ESP8266控制5V继电器目录一、NodeMCU二、工作原理本文将使用亚马逊 AlexaEcho 和 ESP8266 控制 5V 继电器。NodeMCUNodeMCU 是一个开源的 IoT 物联网硬件开发板,由于它支持 WIFI 功能且使用方法十分类似 Arduino 开发板,所以近些年获得了越来越多来自全世界的创客朋友们的青睐。NodeMCU 尺寸与 Arduino Nano 类似。...

weixin_39611722的博客 3456

芋道系统功能模块笔记

Java枚举类型(enum)详解_java enum_Archie_java的博客-优快云博客Java 5版本之后引入的除泛型之外的另外一个强大特性:枚举,可以将枚举看成一种特殊的类。解决一些固定常量集合的问题上枚举成为唯一首选和推荐的一种方式。不仅是因为它们是强类型,同时它们是可拓展并被当前的很多库和框架所支持。//使用普通方式定义日期常量//直接引用//定义枚举类型enum Day {

hazelzhiye的博客 2255

ShardingSphere-jdbc 5.5.0 + spring boot 基础配置 - 实战篇

shardingsphere 5.5.0移除了sm4算法,自己加上即可。增加spi扩展org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm增加以下代码:SM4算法代码/***/static {@Getter@Overrideif (!

qq_21903999的博客 4746

微服务-微服务为什么要用到 API 网关

微服务架构(通常简称为微服务)是指开发应用所用的一种架构形式。通过微服务,可将大型应用分解成多个独立的组件,其中每个组件都有各自的责任领域。在处理一个用户请求时,基于微服务的应用可能会调用许多内部微服务来共同生成其响应。微服务是互联网业务发展的结果,互联网业务的飞速发展导致系统的架构也在不断地发生变化,总体来说,系统的架构大致经历了:单体应用架构—>SOA 架构—>微服务架构 的演变,具体发展历程和各自的优缺点如下表所示。因此,微服务是互联网发展的必然结果,很多传统公司的系统架构也在逐步微服务化。

Ch3nnn的博客 1844

创新实训项目博客:基于LoRA的医疗大模型高效微调实战

预训练大语言模型(LLMs)虽然具备了广泛的知识和一定的通用能力,但在特定领域(如医疗)或特定任务(如遵循特定指令格式进行思考链推理)上,其表现往往不尽如人意。微调(Fine-tuning)能够使模型学习到特定领域的数据分布和任务模式,从而在目标任务上获得更好的性能,使其更贴合实际应用需求。使用Unsloth框架加载并以4-bit量化模型。基于数据集,构建了包含明确思考链引导的训练Prompt。配置了LoRA参数,并使用SFTTrainer在单张T4 GPU上对模型进行了高效微调。

m0_73556916的博客 1290

【RT-DETR涨点改进】独家创新改进篇 | AAAI2024 | RT-DETR引入CFBlock增强对长程依赖和全局语义信息的建模能力,有助于提升复杂场景下小目标、遮挡目标的检测精度

本文给大家介绍在RT-DETR中引入CFBlock模块,能够有效提升模型对长程依赖和全局语义信息的建模能力,在保持轻量化和高效推理的基础上增强特征表达力,特别有助于提升复杂场景下小目标、遮挡目标的检测精度,从而实现更优的精度与速度平衡。

Ai缝合怪、助力小伙伴高效发论文 260

java软件编程规范_JAVA代码开发规范

一.开发工具规范:1. 开发工具经项目负责人调试后统一确定。2. 开发工具一经确定不允许集成任何非统一插件,若有需要,经项目负责人同意后统一为 项目组成员添加。3. 开发工具的编码格式不允许修改。二.排版规范:1. 关键词(或变量)和操作符之间加一个空格。 例如:int iCont = 1;//操作符和值之间有一个空格。2. 相对独立的代码块与块之间加空行。 例如:两个方法之间需要用空格隔开。3....

weixin_32029863的博客 462

uniapp - 热更新提示:WGT安装包中manifest.json文件不存在 | unexpected EOF!报错详细解决,完美搞定WGT安装包中WWW目录下manifest.json不存在问题

uniapp,安卓android,苹果ios,热更新,热更新code:-1202报错,,WGT热更新报错,uniapp热更新wgt出现报错manifest.json文件不存,uniapp安卓苹果软件热更新时出现错误unexpected EOF!如何解决,怎么解决热更新wgt报错,app新版本下载安装报错WGT安装包中manifest.json文件不存在,WGT安装包中WWW目录下manifest.json不存在,uniapp热更新报错安装失败[-1201]:WGT/WGTU文件格式错误,uniapp-wgt

✅ 精选推荐文章 1万+

java代码开发规范_java代码开发规范

一 编码规范1.1 命名规范代码中的命名均不能以特殊字符(如下划线、$#符号)开始或结束。反例: _name / #Object2. 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。反例: toubao / lipei。3. 类名使用UpperCamelCase风格,必须遵从驼峰形式。正例:CommonUtils / BaseVo4. 方法名、参数名、成员变量、局...

weixin_35713233的博客 262

网表导入virtuoso后发现pg pin忘记connect_pg_net/globalNetConnect怎么办?

数模混合项目中经常需要一些需要到virtuoso去连接的线,比如IO上的pg和一些信号线,除了在pr工作中设置skip route之外还需要做好net的赋值,告诉工具虽然我没在物理上有连接,但是实际上应该连什么net,这部分提现在网表里。在Default Net Name中也填写net name,因为这个net需要做global操作,即在顶层定义这个net,所以需要在net name后加个!打开schematic,删除指定cell pin所接net的label。

m0_61544122的博客 969

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

JAVA 代码开发规范

一.开发工具规范: 1. 开发工具经项目负责人调试后统一确定。 2. 开发工具一经确定不允许集成任何非统一插件,若有需要,经项目负责人同意后统一为 项目组成员添加。 3. 开发工具的编码格式不允许修改。 二.排版规范: 1. 关键词(或变量)和操作符之间加一个空格。 例如:int iCont = 1;//操作符和值之间有一个空格。 2. 相对独立的代码块与块...

weixin_34419321的博客 100

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

每日学学Java开发规范,代码格式(附阿里巴巴Java开发手册(终极版))

每次去不同的公司,码不同的代码,适应不同的规范,经常被老大教育规范问题,我都有点走火入魔的感觉,还是要去看看阿里巴巴Java开发规范,从中熟悉一下,纠正自己,码出高效,码出质量。想细看的可以去官网下载,或者下面自取阿里巴巴Java开发手册(终极版)【强制】大括号的使用约定。如果是大括号内为空,则简洁地写成{}即可,不需要换行;如果是非空代码块则:(这个会比较常见,很多程序员在快速编码过程中直接if())左大括号前不换行。左大括号后换行。右大括号前换行。

李老头探索的博客 1721

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

idea自动换行,设置每行代码长度 -阿里巴巴Java开发规范建议

选择File,选择Settings,搜索Code Style,点击Editor下的Code Style,修改:Hard wrap at 设置每行代码长度 columns,勾选Wrap on typing应该是自动换行的意思,ok

shuai的博客 2万+

看看这些Java代码开发规范吧!你好,我好,大家好!

前言: 插曲:提莫的返工时间又、双、叒、叕、延长了!床上—电脑前—饭桌—电脑前—饭桌—床上的生活状态十多天了! 作为一名开发人员,当你接手他人的项目时,且当你阅读他人的代码时,是有没有遇到脑袋充血,感觉Java要把你“送走”的感觉呢?我们在用Java开发技术进行开发前,一定要牢牢恪守Java的开发标准,唯有如此你的Java开发之路才能更为顺畅。而掌握相应的Java开发技巧,则能够让你作业起来...

豆汁 891

Java 代码开发规范

本文简要说明了 Java 开发代码相关的强制性规范,各研发人员必须遵守以下规范: 【强制】代码中使用lombok插件 【强制】所有Controller和Service层的类、函数、接口、参数都要有注释 【强制】所有Controller层的接口只做装箱和拆箱及参数传递,不处理任何业务逻辑 【强制】复杂函数内要做简单的TODO说明 【强制】函数和参数的命名要按实际含义...

丶小剩子的博客 338

JAVA代码开发规范

分页查询-page查询-info新增-save修改-update删除-delete查询-query新增-save修改-modify删除-remove查询-select新增-insert修改-modify删除-delete。

weixin_58508767的博客 160

【代码规范神器】阿里巴巴Java开发规范插件IDE使用教程

过年生病,闲的无聊,玩玩阿里巴巴Java开发规范插件。开源插件GitHub地址:https://github.com/alibaba/p3c 插件支持IDEA以及Eclipse安装推荐JDK:JDK1.8+http://mp.weixin.qq.com/s/81oBdbNATkkTXShQAfWFJghttp://blog.youkuaiyun.com/jiashuai94/article/details/7...

sougoliu的专栏 1375

【亲测免费】 阿里巴巴Java开发规范手册:提升代码质量的必备指南

在现代软件开发领域,高质量的代码不仅仅是功能的实现,更是系统稳定性和可维护性的基石。为了帮助Java开发者更好地遵循最佳实践,阿里巴巴集团推出了《阿里巴巴Java开发规范手册》。这份手册是阿里巴巴技术团队多年实战经验的结晶,旨在为开发者提供一套全面、实用的编程规范,从而提升代码质量,减少潜在的故障风险。 ## 项目技术分析 《阿里巴巴Java开发规范手册》涵盖了Java开发的多个关键领域,包括

gitblog_09740的博客 804

IDEAL葵花宝典:java代码开发规范插件 p3c

前言:   P3C插件是阿里巴巴p3c项目组进行研发。这个项目组是阿里巴巴开发爱好者自发组织形成的虚拟项目组,根据《阿里巴巴Java开发规范》转化而成的自动化插件,并且实现了部分自动编程。 插件使用简易教程(基于IDEA): 1):打开 Settings---->Plugins---> 进行搜索--->选择---->"Alibaba Java Cod...

andymmm0925的博客 234

代码重构——java代码开发规范

本文主要介绍了Java后端设计模式的重构,包括Java规范插件的作用和使用方法,Java编码规范的多个方面,以及Java异常规范的处理。文章旨在帮助开发者遵循最佳实践,提高代码质量和维护性。

庄小焱 2328
上一篇: Springboot-配置多数据源-接口切换
下一篇: Mat内存泄漏分析
Diaos Coder
博客等级 码龄9年 9粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值