IT评测·应用市场-qidao123.com

标题: 国产开源项目XXCloud评价-代码质量走查与评价 [打印本页]

作者: 汕尾海湾    时间: 2024-9-11 04:03
标题: 国产开源项目XXCloud评价-代码质量走查与评价
<br><br><br>
  1. <p>        public ReturnT<String> add(XxlJobInfo jobInfo) {<br></p><p><br></p><p>                // valid base<br></p><p>                XxlJobGroup group = xxlJobGroupDao.load(jobInfo.getJobGroup());<br></p><p>                if (group == null) {<br></p><p>                        return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_choose")+I18nUtil.getString("jobinfo_field_jobgroup")) );<br></p><p>                }<br></p><p>                if (jobInfo.getJobDesc()==null || jobInfo.getJobDesc().trim().length()==0) {<br></p><p>                        return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_jobdesc")) );<br></p><p>                }<br></p><p>                if (jobInfo.getAuthor()==null || jobInfo.getAuthor().trim().length()==0) {<br></p><p>                        return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+I18nUtil.getString("jobinfo_field_author")) );<br></p><p>                }<br></p><p><br></p><p>                // valid trigger<br></p><p>                ScheduleTypeEnum scheduleTypeEnum = ScheduleTypeEnum.match(jobInfo.getScheduleType(), null);<br></p><p>                if (scheduleTypeEnum == null) {<br></p><p>                        return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) );<br></p><p>                }<br></p><p>                if (scheduleTypeEnum == ScheduleTypeEnum.CRON) {<br></p><p>                        if (jobInfo.getScheduleConf()==null || !CronExpression.isValidExpression(jobInfo.getScheduleConf())) {<br></p><p>                                return new ReturnT<String>(ReturnT.FAIL_CODE, "Cron"+I18nUtil.getString("system_unvalid"));<br></p><p>                        }<br></p><p>                } else if (scheduleTypeEnum == ScheduleTypeEnum.FIX_RATE/* || scheduleTypeEnum == ScheduleTypeEnum.FIX_DELAY*/) {<br></p><p>                        if (jobInfo.getScheduleConf() == null) {<br></p><p>                                return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")) );<br></p><p>                        }<br></p><p>                        try {<br></p><p>                                int fixSecond = Integer.valueOf(jobInfo.getScheduleConf());<br></p><p>                                if (fixSecond < 1) {<br></p><p>                                        return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) );<br></p><p>                                }<br></p><p>                        } catch (Exception e) {<br></p><p>                                return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("schedule_type")+I18nUtil.getString("system_unvalid")) );<br></p><p>                        }<br></p><p>                }<br></p><p><br></p><p>                // valid job<br></p><p>                if (GlueTypeEnum.match(jobInfo.getGlueType()) == null) {<br></p><p>                        return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_gluetype")+I18nUtil.getString("system_unvalid")) );<br></p><p>                }<br></p><p>                if (GlueTypeEnum.BEAN==GlueTypeEnum.match(jobInfo.getGlueType()) && (jobInfo.getExecutorHandler()==null || jobInfo.getExecutorHandler().trim().length()==0) ) {<br></p><p>                        return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("system_please_input")+"JobHandler") );<br></p><p>                }<br></p><p>                // 》fix "\r" in shell<br></p><p>                if (GlueTypeEnum.GLUE_SHELL==GlueTypeEnum.match(jobInfo.getGlueType()) && jobInfo.getGlueSource()!=null) {<br></p><p>                        jobInfo.setGlueSource(jobInfo.getGlueSource().replaceAll("\r", ""));<br></p><p>                }<br></p><p><br></p><p>                // valid advanced<br></p><p>                if (ExecutorRouteStrategyEnum.match(jobInfo.getExecutorRouteStrategy(), null) == null) {<br></p><p>                        return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorRouteStrategy")+I18nUtil.getString("system_unvalid")) );<br></p><p>                }<br></p><p>                if (MisfireStrategyEnum.match(jobInfo.getMisfireStrategy(), null) == null) {<br></p><p>                        return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("misfire_strategy")+I18nUtil.getString("system_unvalid")) );<br></p><p>                }<br></p><p>                if (ExecutorBlockStrategyEnum.match(jobInfo.getExecutorBlockStrategy(), null) == null) {<br></p><p>                        return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_executorBlockStrategy")+I18nUtil.getString("system_unvalid")) );<br></p><p>                }<br></p><p><br></p><p>                // 》ChildJobId valid<br></p><p>                if (jobInfo.getChildJobId()!=null && jobInfo.getChildJobId().trim().length()>0) {<br></p><p>                        String[] childJobIds = jobInfo.getChildJobId().split(",");<br></p><p>                        for (String childJobIdItem: childJobIds) {<br></p><p>                                if (childJobIdItem!=null && childJobIdItem.trim().length()>0 && isNumeric(childJobIdItem)) {<br></p><p>                                        XxlJobInfo childJobInfo = xxlJobInfoDao.loadById(Integer.parseInt(childJobIdItem));<br></p><p>                                        if (childJobInfo==null) {<br></p><p>                                                return new ReturnT<String>(ReturnT.FAIL_CODE,<br></p><p>                                                                MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_not_found")), childJobIdItem));<br></p><p>                                        }<br></p><p>                                } else {<br></p><p>                                        return new ReturnT<String>(ReturnT.FAIL_CODE,<br></p><p>                                                        MessageFormat.format((I18nUtil.getString("jobinfo_field_childJobId")+"({0})"+I18nUtil.getString("system_unvalid")), childJobIdItem));<br></p><p>                                }<br></p><p>                        }<br></p><p><br></p><p>                        // join , avoid "xxx,,"<br></p><p>                        String temp = "";<br></p><p>                        for (String item:childJobIds) {<br></p><p>                                temp += item + ",";<br></p><p>                        }<br></p><p>                        temp = temp.substring(0, temp.length()-1);<br></p><p><br></p><p>                        jobInfo.setChildJobId(temp);<br></p><p>                }<br></p><p><br></p><p>                // add in db<br></p><p>                jobInfo.setAddTime(new Date());<br></p><p>                jobInfo.setUpdateTime(new Date());<br></p><p>                jobInfo.setGlueUpdatetime(new Date());<br></p><p>                xxlJobInfoDao.save(jobInfo);<br></p><p>                if (jobInfo.getId() < 1) {<br></p><p>                        return new ReturnT<String>(ReturnT.FAIL_CODE, (I18nUtil.getString("jobinfo_field_add")+I18nUtil.getString("system_fail")) );<br></p><p>                }<br></p><p><br></p><p>                return new ReturnT<String>(String.valueOf(jobInfo.getId()));<br></p><p>        }</p>
复制代码
<br><br>重复代码:多次出现类似的条件判断和错误信息返回,可以思量提取出一个公共方法来减少代码冗余。<br>错误信息:虽然有国际化支持,但是部分错误信息直接拼接字符串,如"Cron"+I18nUtil.getString("system_unvalid"),可以统一通过键值来获取,以保持风格一致。<br>解释规范:代码中有解释,但有些地方缺少须要的解释,特别是业务逻辑复杂的部分,更详细的解释有助于其他开发者理解。<br>常量使用:对于固定不变的字符串,如 "Cron" 或者 "xxx,," 这样的模式,建议使用常量界说,这样可以提高代码的可维护性。<br>方法命名:isNumeric 方法名符合其功能,但如果是自界说的方法,建议确保实在现了正确的数字验证逻辑,并且思量到各种界限情况。<br>尚有的问题建议:<br>1. 方法长度与职责分离<br><br>2. 重复代码<br><br>3. 国际化字符串的处置惩罚<br><br>4. Magic Numbers和硬编码<br><br>5. 缺少单一职责原则<br><br>6. 非常处置惩罚不敷细致<br><br>7. 性能与安全<br><br>8. 其他建议<br><br>HardCode: 硬编码无处不在,可维护性差<br>判断分析:逻辑嵌套,可读性差<br><br><br>第二段代码<br><br>
  1. <p>        public Map<String, Object> pageList(int start, int length, int jobGroup, int triggerStatus, String jobDesc, String executorHandler, String author) {<br></p><p><br></p><p>                // page list<br></p><p>                List<XxlJobInfo> list = xxlJobInfoDao.pageList(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author);<br></p><p>                int list_count = xxlJobInfoDao.pageListCount(start, length, jobGroup, triggerStatus, jobDesc, executorHandler, author);<br></p><p>                <br></p><p>                // package result<br></p><p>                Map<String, Object> maps = new HashMap<String, Object>();<br></p><p>            maps.put("recordsTotal", list_count);                // 总记录数<br></p><p>            maps.put("recordsFiltered", list_count);        // 过滤后的总记录数<br></p><p>            maps.put("data", list);                                          // 分页列表<br></p><p>                return maps;<br></p><p>        }<br></p>
复制代码
具体的评价和改进建议:<br>1. 代码简洁性与职责<br><br>2. 方法参数计划<br><br>3. 命名规范<br><br>4. Magic Strings硬编码<br><br>5. 类型安全问题<br><br>6. 数据库访问性能优化<br><br>7. 非常处置惩罚<br><br>8.参数验证<br>综合评价<br><br><br><br>第三段代码<br><br>
  1. <p>    public void fillRealUser(String orgId, String realId, RealOrganizationUser realUser) throws AccountException {<br></p><p>        /*<br></p><p>         * 找到映射资源表,查找到DynaBean,执行真实用户parse<br></p><p>         * */<br></p><p>        DynaBean orgBean = rbacOrganizationService.findById(orgId);<br></p><p>        if (orgBean == null) {<br></p><p>            throw new AccountException("Can't find the org mapping from the database!");<br></p><p>        }<br></p><p><br></p><p>        //获取到映射的资源表和资源表主键<br></p><p>        String tableProduct = orgBean.getStr("SY_PRODUCT_CODE");<br></p><p>        String tableCode = orgBean.getStr("ORG_RESOURCETABLE_CODE");<br></p><p>        String tableIdCode = orgBean.getStr("ORG_FIELD_PK");<br></p><p>        if (Strings.isNullOrEmpty(tableCode) || Strings.isNullOrEmpty(tableIdCode)) {<br></p><p>            throw new AccountException("Can't find the tableCode or pk code from the org mapping!");<br></p><p>        }<br></p><p><br></p><p>        //获取映射字段,账号名称、账号编码、账号手机、账号邮箱、账号头像<br></p><p>        String accountNameField = orgBean.getStr("ORG_ACCOUNT_NAME");<br></p><p>        String accountCodeField = orgBean.getStr("ORG_ACCOUNT_CODE");<br></p><p>        String accountPhoneField = orgBean.getStr("ORG_ACCOUNT_PHONE");<br></p><p>        String accountEmailField = orgBean.getStr("ORG_ACCOUNT_MAIL");<br></p><p>        String accountAvatarField = orgBean.getStr("ORG_ACCOUNT_AVATAR");<br></p><p><br></p><p>        if (Strings.isNullOrEmpty(accountNameField) || Strings.isNullOrEmpty(accountCodeField)<br></p><p>                || Strings.isNullOrEmpty(accountPhoneField) || Strings.isNullOrEmpty(accountEmailField)<br></p><p>                || Strings.isNullOrEmpty(accountAvatarField)) {<br></p><p>            throw new AccountException("Can't find the mapping fields from the org mapping!");<br></p><p>        }<br></p><p><br></p><p>        OrgTableRpcService orgTableRpcService;<br></p><p>        if (Strings.isNullOrEmpty(tableProduct) || "rbac".equals(tableProduct)) {<br></p><p>            orgTableRpcService = SpringContextHolder.getBean(OrgTableRpcService.class);<br></p><p>        } else {<br></p><p>            orgTableRpcService = RpcSchemaFactory.getRemoteProvierClazz(tableProduct, "orgTableRpcService", OrgTableRpcService.class);<br></p><p>        }<br></p><p><br></p><p>        //获取到bean进行parse,执行返回<br></p><p>        List<DynaBean> userBeanList = orgTableRpcService.findOrgUsers(tableCode, NativeQuery.build().eq(tableIdCode, realId));<br></p><p>        if (userBeanList == null || userBeanList.isEmpty()) {<br></p><p>            throw new AccountException(String.format("Can't find the org user {} from the org config!",realId));<br></p><p>        }<br></p><p><br></p><p>        DynaBean userBean = userBeanList.get(0);<br></p><p>        realUser.parse(userBean.getValues());<br></p><p>        if (!OrgType.DEPARTMENT_ORG_ID.getCode().equals(orgBean.getStr("JE_RBAC_ORG_ID"))) {<br></p><p>            realUser.setId(userBean.getStr(tableIdCode));<br></p><p>            realUser.setName(userBean.getStr(accountNameField));<br></p><p>            realUser.setCode(userBean.getStr(accountCodeField));<br></p><p>            realUser.setAvatar(userBean.getStr(accountAvatarField));<br></p><p>            realUser.setPhone(userBean.getStr(accountPhoneField));<br></p><p>            realUser.setEmail(userBean.getStr(accountEmailField));<br></p><p>            RealOrganization organization = new Department();<br></p><p>            organization.setId(orgBean.getStr("JE_RBAC_ORG_ID"));<br></p><p>            organization.setName(orgBean.getStr("ORG_NAME"));<br></p><p>            organization.setCode(orgBean.getStr("ORG_CODE"));<br></p><p>            realUser.setOrganization(organization);<br></p><p>        }<br></p><p><br></p><p>    }</p><p><br></p>
复制代码
具体的评价和改进建议:<br>1. 单一职责原则<br><br>2. 重复的空值检查<br><br>3. Magic Strings(硬编码的字符串)<br><br>4. 非常处置惩罚不敷具体<br><br>5. 缺乏日记记录<br><br>6. 依赖注入和服务获取方式<br><br>7. 方法参数和返回值<br><br>8. Java 8+ 的改进建议<br><br>
  1. <br>
复制代码
第四段VUE.js代码质量<br><br>
  1. <br>
复制代码
  1. <br>  <br>    <br>      <br>        <br>          <br>          <br>        <br>        <br>           <br>        <br>        <span /pp          >解释:功能编码为特殊字段,修改编码存在风险,需要您同步修改前端事件JS和背景代码中使用该功能的编码,请慎重修改!</span/pp        ><br>      <br>    <br>  <br><br><br><br><br>
复制代码
代码质量评价<br><br><br><br>总结<br><br>在软件开发过程中,代码质量直接影响应用的性能、可维护性、安全性和扩展性。通过对以上Java和Vue.js代码的分析,可以总结出代码质量需要关注的几个关键方面:<br>1. 代码可读性<br><br>2. 代码复用性和模块化<br><br>3. 错误处置惩罚和非常管理<br><br>4. 性能优化<br><br>5. 代码的一致性<br><br>6. 安全性<br><br>7. 可维护性和扩展性<br><br>8. 解释和文档<br><br><br><br><br>     代码质量不但仅是风格问题,它直接影响应用的可读性、复用性、错误管理、性能、安全性、可维护性和扩展性。高质量的代码可以减少技术债务,降低维护成本,提高开发效率和软件的整体质量。关注这些方面,将帮助开发团队构建更妥当、高效和安全的软件系统。<br><br><br>本日先到这儿,希望对云原生,技术领导力, 企业管理,系统架构计划与评估,团队管理, 项目管理, 产物管理,信息安全,团队建设 有参考作用 , 您可能感兴趣的文章: <br>构建创业公司突击小团队<br>国际化情况下系统架构演化<br>微服务架构计划<br>视频直播平台的系统架构演化<br>微服务与Docker介绍<br>Docker与CI持续集成/CD<br>互联网电商购物车架构演变案例<br>互联网业务场景下消息队列架构<br>互联网高效研发团队管理演进之一<br>消息系统架构计划演进<br>互联网电商搜索架构演化之一<br>企业信息化与软件工程的迷思<br>企业项目化管理介绍<br>软件项目成功之要素<br>人际沟透风格介绍一<br>精益IT组织与分享式领导<br>学习型组织与企业<br>企业创新文化与等级观念<br>组织目标与个人目标<br>初创公司人才招聘与管理<br>人才公司情况与企业文化<br>企业文化、团队文化与知识共享<br>高效能的团队建设<br>项目管理沟通计划<br>构建高效的研发与自动化运维 <br>某大型电商云平台实践 <br>互联网数据库架构计划思路 <br>IT底子架构规划方案一(网络系统规划) <br>餐饮行业解决方案之客户分析流程 <br>餐饮行业解决方案之采购战略订定与实施流程 <br>餐饮行业解决方案之业务计划流程 <br>供应链需求调研CheckList <br>企业应用之性能实时度量系统演变 如有想了解更多软件计划与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:<br>
<br>作者:Petter Liu <br>出处:http://www.cnblogs.com/wintersun/ <br>本文版权归作者和博客园共有,接待转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文毗连,否则保留追究法律责任的权利。 该文章也同时发布在我的独立博客中-Petter Liu Blog。<br><br>免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4