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



    作者 王争

    节选:

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

    我相信,很多工程师都很重视代码质量,毕竟谁也不想写被人吐槽的烂代码。但是,就我的了解来看,毫不夸张地讲,很多工程师,甚至一些 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层的业务代码混淆
    缺点是需要程序员了解使用策略模式,对代码优化力度虽然看起来大了,但是可能复杂度也增加了

  • 相关阅读:
    Java中String、StringBuffer和StringBuilder的区别
    Map集合学习
    Set集合学习
    List集合学习
    常用集合类简介及线程安全和非线程安全的集合对象
    JQuery入门
    原生Ajax使用
    JavaScript闭包
    Demo:servlet实现图片的上传
    Android Handler 内存泄漏问题
  • 原文地址:https://www.cnblogs.com/ukzq/p/15740897.html
Copyright © 2020-2023  润新知