教学典型案例06.没有复用思想(代码片段)

爱吃芋圆的兔子 爱吃芋圆的兔子     2023-03-10     631

关键词:

目录

一:背景介绍

反例1

反例2

二:思路&方案

反例一

两个查询在线人员的接口我们可以使用一个接口进行实现,两个接口的区别主要是在于入参不一致,我们可以通过使用mybatis的动态SQL进行实现。

优化代码

Controller层

    @PostMapping("/queryCourseContent")
    public List<CourseContentEntity> queryCourseContent(@RequestBody CourseContentEntity courseContent)
        return iCourseContentService.queryCourseContent(courseContent);
    

IService层

List<CourseContentEntity> queryCourseContent(CourseContentEntity courseContent);

ServiceImpl层

    @Resource
    CourseContentMapper courseContentMapper;

    @Override
    public List<CourseContentEntity> queryCourseContent(CourseContentEntity courseContent) 
        return courseContentMapper.queryCourseContentRecord(courseContent);
    

Mapper层

	//通用查询语句
    List<CourseContentEntity> queryCourseContentRecord(CourseContentEntity courseContentEntity);

Mapper.xml

<select id="queryCourseContentRecord" resultMap="courseContentMap">
        SELECT id,course_assembly_id,assembly_content,create_time,created_id,created_by,update_time,updated_id,updated_by
        FROM  tar_course_content_info
        WhERE
        is_delete=0
        <if test="id != null"> and id = #id </if>
        <if test="courseAssemblyId != null">and course_assembly_id = #courseAssemblyId</if>
        <if test="assemblyContent != null">and assembly_content = #assemblyContent</if>
        <if test="createdBy != null">and created_by = #createdBy</if>
        <if test="updatedBy != null">and updated_by = #updatedBy</if>
        <if test="remark != null">and remark = #remark</if>
    </select>

测试结果

Body中什么都不传,查出来的所有课程

Body中传入参数,查出来的是某个人创建的课程

反例二

将course_id和class_id抽出来作为公共数据使用

优化代码

优化前

		select id,
        user_id,
        user_name,
        questionnaire_id,
        activity_name,
        course_id,
        class_id,
        user_answer,
        start_time,
        update_time,
        remark,
        is_delete
        from
        `arpro_user_answer`
        <where>
            <choose>
                <when test="id !='' and id != null">
                    and id=#id
                </when>
                <when test="user_answer !='' and user_answer != null">
                    user_answer=#user_answer
                    and course_id = #course_id
                    and class_id = #class_id
                </when>
                <when test="questionnaire_id !='' and questionnaire_id != null">
                    and questionnaire_id=#questionnaire_id
                    and course_id = #course_id
                    and class_id = #class_id
                </when>
                <otherwise>
                    and course_id = #course_id
                    and class_id = #class_id
                    and is_delete = 0
                </otherwise>
            </choose>
        </where>
    </select>

优化后

        select id,
        user_id,
        user_name,
        questionnaire_id,
        activity_name,
        course_id,
        class_id,
        user_answer,
        start_time,
        update_time,
        remark,
        is_delete
        from
        `arpro_user_answer`
        <where>
            course_id = #course_id
            and class_id = #class_id
            and is_delete = 0
            <choose>
                <when test="id !='' and id != null">
                    and id=#id
                </when>
                <when test="user_answer !='' and user_answer != null">
                    user_answer=#user_answer
                </when>
                <when test="questionnaire_id !='' and questionnaire_id != null">
                    and questionnaire_id=#questionnaire_id
                </when>
            </choose>
        </where>
    </select>

测试结果

三:总结

在软件设计的时候要从全局观出发,要考虑到前端使用哪些组件,后端使用哪些接口,以及后端需要的接口是有可以复用的。在进行软件设计时,我们也要想是面向对象的设计还是面向过程的设计。如果是面向对象的设计,那么就需要考虑可复用、可扩展、可维护。

教学典型案例22.原型图的面向对象

目录一:背景介绍二:面向对象思想面向对象思想:三:分析过程1、颗粒封装、组合使用将所有页面中的公共内容抽取出来,封装成组件2、可复用、可扩展通过组件的组合生产对应的页面四:总结一:... 查看详情

教学典型案例21.面向对象复用面向对象实现立体化权限落地

目录一:背景介绍1、针对于激励配置的功能体现出来的:面向对象的思想就可以实现极大程度的复用性的问题2、脱离学习通设计图,过程化,如何用面向对象的思想来去组织管理流程图3、词云位置记录定制化二&... 查看详情

教学典型案例18.开门小例子理解面向对象(代码片段)

目录一:背景介绍业务场景:业务分析:二:实现思路1、面向过程:2、面向对象(抽象、封装、继承、多态)3、面向对象(抽象、封装、继承、多态、反射)三:实现过程1、面向过程࿱... 查看详情

教学典型案例14.课程推送页面整理-增加定时功能(代码片段)

目录一:背景介绍1、代码可读性差,结构混乱2、逻辑边界不清晰,封装意识缺乏![在这里插入图片描述](https://image.cha138.com/20230308/782a0a259bc34459b1977ae1de43e6db.jpg)3、展示效果不美观二:案例问题分析以及解决过程1、... 查看详情

[读书笔记]java编程思想第7章之复用类(代码片段)

只需在新的类中产生现有类的对象。由于新的类是由现有类的对象所组成,所以这种方法称为组合。初始化对象引用有以下几种方法:1)在定义对象的地方初始化。这意味着它们总是能够在构造器被调用之前被初始... 查看详情

[jsdom&bom]排他思想及其案例(代码片段)

[JSDOM&BOM]排他思想排他思想算法框架<body><button>按钮1</button><button>按钮2</button><button>按钮3</button><button>按钮4</button><button>按钮5</button>& 查看详情

写出可复用代码的基本思想与实践

要写出可复用的代码,基本思想是逻辑拆分。具体的技术手段有:工具类;业务辅助类;业务小组件;统一机制封装;制订标准数据格式;共享库。要写出可复用的代码,基本思想是逻辑拆分。具体的技术手段有:工具类;业务... 查看详情

教学典型案例28.生产环境nginx限制上传大小(代码片段)

目录一:背景介绍二:Nginx限制上传大小1、Nginx官方文档说明2、设置参数1)、在server模块中设置2)、在http模块中设置三:问题分析过程四:总结一:背景介绍二:Nginx限制上传大小1、Nginx官方文档... 查看详情

教学典型案例13.学情页面逻辑问题(代码片段)

目录一:背景介绍二:LocalStorage缓存①localStorage是什么?②如何使用localStorage缓存三:学情页面逻辑分析过程四:总结五:升华一:背景介绍使用的前端技术是Vue2,前端逻辑:取到之后只放到... 查看详情

教学典型案例01.redis只管存不管删除让失效时间删除的问题(代码片段)

目录一:背景介绍二:redis1)redis数据类型①String(字符串)②Hash(哈希)③List(列表)④Set(集合)2)缓存同步①设置有效期②同步双写③异步通知3)key的过期时间具体设置方式... 查看详情

python爬虫编程思想:实战案例:抓取所有的网络资源(代码片段)

       Python爬虫编程思想(7):实战案例:抓取博客文章列表         到现在为止,我们已经对网络爬虫涉及到的基本知识有了一个初步的了解。本文会编写一个简单的爬虫应用,以便让读者对爬... 查看详情

springcloudstream消息驱动设计思想以及整合rabbitmq消息队列案例--学习笔记(代码片段)

一,RabbitMQ的安装和配置并启动参见RabbitMQ的安装和配置https://blog.csdn.net/weixin_43025151/article/details/123186641RabbitMQ启动成功:二,SpringCloudStream消息驱动1,设计思想一个标准的消息队列MQ,如下图:为什么用Cloud 查看详情

10分钟,手把手教学正确还原京东倒计时,初学者必看,简单易懂!(代码片段)

前言    由于今天在c站意外看到了一篇写京东倒计时的案例,觉得代码写的有问题。于是就在百度和c站搜了一下,发现基本上写的京东倒计时都是有问题的,根本没有完全还原京东的倒计时,逻辑是有问题的&#x... 查看详情

分享几点单片机面向对象思想的案例(代码片段)

关注+星标公众号,不错过精彩内容来源|果果小师弟在看别人单片机程序时,你也许是奔溃的,因为全局变量满天飞,不知道哪个在哪用了,哪个表示什么,而且编写极其不规范。自己写单片机程序时&#x... 查看详情

i/o模式及selectpollepoll(代码片段)

I/O多路复用技术复用技术(multiplexing)并不是新技术而是一种设计思想,在通信和硬件设计中存在频分复用、时分复用、波分复用、码分复用等。在日常生活中复用的场景也非常多。从本质上来说,复用就是为了解决有限资源和... 查看详情

io多路复用(代码片段)

...绪,就能够通知应用程序进行相应的读写操作;没有文件句柄就绪时会阻塞应用程序,交出cpu。多路是指网络连接,复用指的是同一个线程2、为什么出现IO多路复用机制?没有IO多路复用机制时,有BIO、N 查看详情

androidmvp-编程思想3(mvp-内存泄露问题处理,基类封装,有没有必要再使用软引用?)(代码片段)

前言通过一个小的登录功能模块案例,帮助大家了解MVP。最终实现一个结合Rxjava2,Retrofit的MVP通用框架。代码放到github上。(如有错误之处,请在评论区指出,谢谢。如果感觉写的不错,请点赞,关注,... 查看详情

每天学一个,设计模式概要(代码片段)

...做底层软件的人经常所缺乏的思想,或者说,很少有软件复用、设计复用的意识。  比如,现在要设计一个定时器,用于计时,当计时时间满足条件时执行某项任务。假设硬件定时器中断1ms,任务定时1s,可以用uint32_t 查看详情