zoukankan      html  css  js  c++  java
  • 开篇词 | 一对一的设计与编码集训,让你告别没有成长的烂代码!


    作者 王争

    节选:

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

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

  • 相关阅读:
    kafka-python基本使用
    RabbitMq 消息队列详解
    Socket 编程
    python 进程, 线程 ,协程,锁,协程应用到爬虫的讲解
    python中with的用法
    为什么 Elasticsearch 需要堆内存来存储数据
    面向数据的架构
    跟我一起学Redis之看完这篇比常人多会三种类型实战(又搞了几个小时)
    跟我一起学.NetCore之熟悉的接口权限验证不能少(Jwt)
    跟我一起学.NetCore之WebApi接口裸奔有风险(Jwt)
  • 原文地址:https://www.cnblogs.com/ukzq/p/15740897.html
Copyright © 2011-2022 走看看