从Java开源项目中总结出的常见坏实践(Bad Practice) |
您所在的位置:网站首页 › columnname什么意思 › 从Java开源项目中总结出的常见坏实践(Bad Practice) |
一些开源项目包含了各种编程的最佳实践供人参考学习和借鉴。但是也有一些开源项目虽然初衷是好的。但是包含了一些代码的坏实践。特别是对于一部分刚入行的大学生来说,可能会给到一些错误的示范。于是在此列举一些项目中的坏实践。
1.方法的用意判断是与否却返回字符串的“0”或者“1”
Poor有不好,差的意思。 例如My english is poor.
这里的Poor是差的意思。
但是下图这个方法getDatePoor。也用poor来表达获取时间“差”的含义。
英语还是程序员应该要掌握学习的。不能光靠机翻英语,不然容易闹笑话。 很多方法或者功能我们应该尽可能的搜索是否已经有开源成熟的jar包或者框架实现。成熟的开源jar包或者框架,有大量完备的测试以及广泛的用户来确保质量。 如果实在需要自己造小轮子,请使用单元测试来确保质量 大量的if-else语句,具体情况具体分析。但是大部分都可以用卫语句提前返回结果。避免大量嵌套。 例如左边的写法可以改为右边的写法 像下图这种情况可以用Stream Lambda来进行简化 优化后 有些时候可能会写出一些不必要的冗余判断 我们应该封装一部分代码细节,暴露出代码的主流程,优化后
这样会造成布尔字段取出时,还需要跟字符串1或者0进行比对,这是很尴尬的设计。 我们捕获异常之后一般都需要使用log来记录错误情形,如果什么都不做,就很可能丢失错误信息,并且使代码排查过程更加困难。 使用Java是静态语言,使用Map填充数据,反而失去了静态语言带来了代码检查以及IDEA识别字段引用的功能。 请不用将项目中所有的常量一股脑的放到一个类中。 可以使用像这种静态类的方式,分门别类地放入不同的常量 有时候用1表示肯定,有时候用0表示肯定,有时候用Y表示肯定。 在外层方法判断一遍,在内层方法又进行一遍一样的判断 常量的命名请使用大写加下划线的格式 就一种case了 完全没有必要使用switch语句 例如项目中大量使用了“jpg”的字符串魔法值,使用魔法值使得我们无法统一找到代码的引用处。在重构的时候难免会有疏漏。 如果单个方法的代码行超过80行,意味你的代码缺乏封装和可读性。例如这种一大坨的代码。 public static void initColumnField(GenTableColumn column, GenTable table) { String dataType = getDbType(column.getColumnType()); String columnName = column.getColumnName(); column.setTableId(table.getTableId()); column.setCreateBy(table.getCreateBy()); // 设置java字段名 column.setJavaField(StringUtils.toCamelCase(columnName)); // 设置默认类型 column.setJavaType(GenConstants.TYPE_STRING); column.setQueryType(GenConstants.QUERY_EQ); if (arraysContains(GenConstants.COLUMNTYPE_STR, dataType) || arraysContains(GenConstants.COLUMNTYPE_TEXT, dataType)) { // 字符串长度超过500设置为文本域 Integer columnLength = getColumnLength(column.getColumnType()); String htmlType = columnLength >= 500 || arraysContains(GenConstants.COLUMNTYPE_TEXT, dataType) ? GenConstants.HTML_TEXTAREA : GenConstants.HTML_INPUT; column.setHtmlType(htmlType); } else if (arraysContains(GenConstants.COLUMNTYPE_TIME, dataType)) { column.setJavaType(GenConstants.TYPE_DATE); column.setHtmlType(GenConstants.HTML_DATETIME); } else if (arraysContains(GenConstants.COLUMNTYPE_NUMBER, dataType)) { column.setHtmlType(GenConstants.HTML_INPUT); // 如果是浮点型 统一用BigDecimal String[] str = StringUtils.split(StringUtils.substringBetween(column.getColumnType(), "(", ")"), ","); if (str != null && str.length == 2 && Integer.parseInt(str[1]) > 0) { column.setJavaType(GenConstants.TYPE_BIGDECIMAL); } // 如果是整形 else if (str != null && str.length == 1 && Integer.parseInt(str[0]) |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |