多线程编程反模式

您是否曾经进行过代码审查,记录了非常高的WTF / m? 您是否想知道所有这些错误代码的原因是什么? 在大多数情况下,导致原因1的原因是使用设计和编码反模式。

如果您喜欢定义,请参见以下内容:AntiPattern是一种文学形式,它描述了对问题的普遍存在的解决方案,该问题产生了肯定的负面影响。 AntiPattern可能是由于经理或开发人员不了解更好,对解决特定类型的问题没有足够的知识或经验,或者在错误的情况下应用了非常好的模式而导致的。

重新发明轮子

IMO经常出现的反例是缺乏对某些有用框架/库的了解。 Apache commons lang和commons集合是每个Java项目中都应该存在的依赖项。

您可以编写自己喜欢的循环过滤或选择集合中的某些对象的方法,也可以使用CollectionUtils.select(…)或CollectionUtils.filter(…)。

您可以执行一些花哨的非null检查,最后以巨大的if-else构造结束,或者可以使用StringUtils.isNotBlank(…)。 由你决定。

一般规则是不要试图重新发明轮子。 有些人喜欢编写自己的Reflection utils,而Apache的commons beanutils ,Spring的BeanUtils和BeanWrapper可以解决问题。

货物崇拜编程

货物崇拜编程是一种编程样式,其中使用模式和方法而不了解原因。 “货运邪教”一词最初是指第二次世界大战后在南太平洋长大的土著宗教。 这些团体的做法集中在建造精美的飞机和军事起落跑道的模型上,以期召唤在战争期间带来奇妙货物的神似飞机。

大多数情况下,熟练的或经验不足的程序员会使用这种编程方式从其他地方复制粘贴某些代码。
例子:
–在自说明代码中添加不必要的注释 –为垃圾将毫无问题地自动收集的对象添加删除代码 –创建工厂以构建简单的对象

通过异常/期望处理进行编码

代替 检查某些特定的转折情况值(例如null值)的方法,有些人喜欢捕获NullPointerException并在catch块中执行一些逻辑。 这种编码方式称为期望处理,因为预期会发生异常。

发明了异常是为了通知您以下事实:确实发生了一些非常糟糕的事情,但并不意味着经常将它们抛出。 这就是为什么它们被称为“例外”。 如果发生这种情况,请仔细处理它们,但不要滥用它们以执行某些本可以通过简单的if-else检查实现的逻辑。

避免/吞咽异常

参考前面的反模式,当引发异常时,意味着发生了意外情况。 您应该做的最后一件事是吞下这些异常,而不是处理其有用的信息。

例如,如果您有一个方法只能返回1个对象(因为您希望它是唯一的),则可以执行返回结果列表的数据库查询,检查该列表的大小是否等于1,然后执行只能返回1个唯一对象的查询。结果(如果没有抛出异常)。 如果要实现类似的功能,则意味着预期的对象可能不是唯一的,这意味着实现与分析中所说的有所不同。

继承地狱

继承应谨慎处理。 它非常有用,但是您只能使用它的预期用途。 如果继承树变得肿,那是不对的。 不要为1种特定情况编写抽象类。 请改用合成。 策略模式可以在这里派上用场。

例如,如果您的JSF受管bean'EditUserManagedBean'扩展了AbstractEditingManagedBean,又扩展了AbstractSelectionManagedBean,又扩展了AsbtractParentDetailManagedBean,又扩展了AbstractManagedBean,则您应该知道有些错误,并且应该有其他方法可以实现此行为

镀金 和过早优化

有些人喜欢通过继续努力来增强代码,直到付出额外的努力才增加了价值,而不是坚持要求。 此处犯的错误是,使最终用户看到产品中的其他或增强功能比用户要求或期望的功能更加高兴。 用户可能对结果感到失望,而开发人员的额外努力可能是徒劳的。 该过程称为镀金。

镀金与过早的优化有关。 过早的优化是指考虑将来可能会出现的问题,但目前还不是这种情况。 您应该只考虑要求什么和要求什么,而不考虑最终可能对将来有用的东西。 频繁发生的过早优化是过早的性能优化。 如果此时不存在性能问题,请不要尝试处理它们,当它们发生时再进行处理。

参考资料

  • 由我们的JCG合作伙伴 Glenn Dejaeger在about:software development中 编程反模式 。
  • http://en.wikipedia.org/wiki/Anti-pattern#Programming_anti-patterns
相关文章 :
  • JDK中的设计模式
  • 正确记录应用程序的10个技巧
  • 每个程序员都应该知道的事情
  • Java教程和Android教程列表

翻译自: https://www.javacodegeeks.com/2011/10/programming-antipatterns.html

多线程编程反模式

多线程编程反模式_编程反模式相关推荐

  1. 工厂方法模式_工厂方法模式

    工厂方法模式是简单工厂模式的升级版,简单工厂模式不符合设计模式的原则(即:单一职责,开闭原则) 优点: 职责明确,扩展方便 缺点:需要创建多个工厂 实现步骤: 1.将工厂通用方法抽取接口 (例如:IF ...

  2. python的盈利模式_八大盈利模式是什么?一篇文教会你盈利模式分析!

    当今如果说到创业,永远绕不开一个话题:"模式". 非创业者往往最关注的是"产品"或"服务": 初级创业者往往最关注的的是"行业&q ...

  3. 工程模式和抽象工厂模式_功能工厂模式

    工程模式和抽象工厂模式 您是否需要一种非常快速的方法来制作Factory对象? 然后,您需要lambda或其他函数传递! 它不仅快速,而且非常简单. 我敢打赌,如果您对Lambdas相当满意,那么您只 ...

  4. 哈斯机床进去debug模式_责任链模式

    原文链接: 责任链模式 | 菜鸟教程​www.runoob.com 顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链.这种模式给予请 ...

  5. shell开启飞行模式_手机飞行模式有什么用 手机飞行模式介绍【详解】

    手机飞行模式功能一直被大家吐槽为最没有用的手机功能,随着智能手机的快速发展,手机很多功能都已经逐渐消失被替代,唯独飞行模式依旧占据着手机设置里的主要地位. 那么问题来了,手机飞行模式到底有什么用? 1 ...

  6. 代理模式 委派模式 策略模式_设计模式 - 委派模式

    理解 首先委派模式不属于23种设计模式. 所谓委派,个人理解是:将为达到最终结果的事情交给其他人或中间人来干,我只要最终结果,其他的事情,由我委派的人来安排. 更直白的表达就是,比如,我们想要盖一栋楼 ...

  7. Hadoop 的三种运行模式_本地模式_伪分布式模式

    演示的版本是:2.7.2 官方文档 Hadoop运行模式 Hadoop运行模式包括:本地模式.伪分布式模式以及完全分布式模式. Hadoop官方网站:http://hadoop.apache.org/ ...

  8. 易语言反截图_[搬运]反截图技术的原理及简单实现

    本帖最后由 592618243 于 2020-12-2 19:43 编辑 前言 该文章将邀请世界第一的编程语言-易语言来为我们演示. 吹逼 随着好玩的游戏越来越多,盖佬人才越来越突出,好玩的游戏+一款 ...

  9. 易语言反截图_[原创]反截图技术的原理及简单实现

    前言 该文章将邀请世界第一的编程语言-易语言来为我们演示. 吹逼 随着好玩的游戏越来越多,盖佬人才越来越突出,好玩的游戏+一款牛逼的WG成为了一个老挂逼的日常生活.鲁迅说过'有乐同享,有难同当',于是 ...

最新文章

  1. ✅书单推荐の自我管理篇✅
  2. Docker框架使用系列教程(七)Dockerfile镜像创建
  3. oracle故障一例,工作中遇到的oracle故障分析和处理一例
  4. 【看动漫学编程】程序员在异世界生个娃 第1篇:太极村
  5. 计算机程序大赛编程,【小学组】海淀区第三届“智慧杯”中小学生计算机程序设计大赛编程思维类初赛...
  6. 在Shell中使用函数文件,引入文件
  7. Axis1.x WebService开发指南—目录索引
  8. 【Python-numpy】输出array时array中间是省略号而没有输出全部内容
  9. web渗透测试中WAF绕过讲解(二)基于HTTP协议绕过
  10. mysql山西区位码_输入码、区位码、国标码与机内码关系简介【转载】
  11. 太阳天顶角和方位角计算
  12. upload-labs-master 通关分析
  13. 免费的百度网盘批量转存软件工具
  14. 《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》——1.2 微信公众账号注册...
  15. django.db.utils.OperationalError: (2003, Can't connect to MySQL server on ‘127.0.0.1’)
  16. 解决vnc客户端不能拷贝粘贴
  17. Android Studio 加载arr文件.arr文件
  18. 如何学习一门计算机语言(续)
  19. Mysql 时间与时区
  20. Gym - 102920 C - Dessert Café (思维)

热门文章

  1. [编程入门]带参数宏定义练习:定义一个带参的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出已交换后的两个值。
  2. 干货!sqlserver数据库所有知识点总结整理,含代码(挺全的)
  3. mybatis简单案例源码详细【注释全面】——Utils层(MybatisUtils.java)
  4. 2017蓝桥杯省赛---java---B---7(日期问题)
  5. 基本类型和字符串互相转换
  6. nginx-配置基于ip或域名的虚拟主机
  7. 什么是无监督学习(监督学习,半监督学习,无监督聚类)?
  8. java集合——具体的集合
  9. java自定义外部接口_如何使用可外部化的接口在Java中自定义序列化
  10. boot gwt_带Spring Boot的GWT