开篇词 | 一对一的设计与编码集训,让你告别没有成长的烂代码!


作者 王争

节选:

写代码可以说是程序员天天要干的事情,要是代码都写不好,最基本的看家本领都练不好,成天堆砌烂代码,写代码还有啥意思呢?那还干啥程序员啊!写出“能用”代码的人比比皆是,但是,并不是每个人都能写出“好用”的代码。只会写能用的代码,我们永远成长不成大牛,成长不成最优秀的那批人。

我相信,很多工程师都很重视代码质量,毕竟谁也不想写被人吐槽的烂代码。但是,就我的了解来看,毫不夸张地讲,很多工程师,甚至一些 BAT 的员工,代码都写得惨不忍睹。一方面,在目前这种快糙猛的开发环境下,很多工程师并没有太多时间去思考如何写高质量代码;另一方面,在烂代码的熏陶下,在没有人指导的环境里,很多工程师也搞不大清楚高质量代码到底长什么样。

在讲解每个实战案例的时候,我会从最原始的问题代码讲起,然后告诉你缺陷在哪里,如何通过设计原则、思想、模式来优化,让你知其然知其所以然,了解背后设计的来龙去脉。我觉得,这比单纯只告诉最终的设计结果要重要得多。我也希望,你不光是被动地听我讲,而是能跟着我的节奏主动地去思考,这对你的逻辑思维训练也会很有帮助。毕竟,对于成天跟程序逻辑打交道的程序员来说,逻辑思维能力是一项非常重要的能力。我们平时要多多加强这方面的锻炼。

配合default在接口中使用相关设计模式:
对应工作流中,相应的节点操作
如[BZBX]业务中有相关的(A)(B)(经理)(秘书)(财务)等节点
则每个节点中含有的提交以及回退则可通过该接口进行抽象化操作



/**
 * @Author: zhangQi
 * @Date: 2021-04-15 9:35
 * bzbx流程 线上
 */
public interface IBZBXNode extends INode{

    /**
     * 提交时根据节点进行变更,如将itemList变为审批中,审批通过等
     * 或流程状态改为CLOSE等
     * default 执行 else node节点
     * @param entity
     * @return
     */
    @NodeInvoke(flowType= FlowType.BZBX)
    default Integer submitByNodeBZBX(GiProcessEntity entity){
        return StaticComponent.defaultSubmit(entity);
    }

    /**
     * TODO 需要将bzbx流程中文件改为上传到gi_process_file中才可以
     * 回退时根据节点清理文件
     * @return
     */
    @NodeInvoke(flowType= FlowType.BZBX)
    default Boolean backwardByNodeBZBX(String instanceId){
        return true;
    }

}


具体实现接口如上图

在调用时,通过bean名称获取到对应实现的子类(nodeCode即流程节点标识)

    @Override
    public Boolean changeProjStatusByNodeCode(String nodeCode, String instanceId) {
        IBZBXNode bzbxNode = (IBZBXNode) SpringUtil.getBean(nodeCode + NodeConstant.NODE);
        return bzbxNode.backwardByNodeBZBX(instanceId);
    }

如该实现节点:

/**
 * @Author: zhangQi
 * @Date: 2021-04-15 9:23
 * 业务A (A岗)
 */
@Component("acceptanceNode")
public class AcceptanceNode implements IBZBXNode, IBZBXDCNode, IBZBXZCNode,
        IZYBNode, IZYBDCNode, IZYBZCNode ,IZYDNode{

这样设计的好处是当有其它不同业务同类节点时,可以节省一些在service层的业务代码混淆
缺点是需要程序员了解使用策略模式,对代码优化力度虽然看起来大了,但是可能复杂度也增加了

原文地址:https://www.cnblogs.com/ukzq/p/15740897.html