多线程编程反模式_编程反模式

多线程编程反模式

您是否曾经进行过代码审查,记录了非常高的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

多线程编程反模式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript 如何求两个数的最小公倍数

1 .用辗转相除法求最大公约数 算法描述: m对n求余传给自己,再次求余, 若余数等于0 则 n 为最大公约数 2.最小公倍数 两个数的积 / 最大公约数 基本思想是采用将两个数相乘,然后除以它们的最大公约数 function getMinCommonMultiple(a, b){return a * b …

数据挖掘10大算法详细介绍

想初步了解下怎样数据挖掘,看到一篇不错的文章转载过来啦~ 转自:http://blog.jobbole.com/89037/ 在一份调查问卷中,三个独立专家小组投票选出的十大最有影响力的数据挖掘算法,今天我打算用简单的语言来解释一下。 一旦你知道了这些算法是什么…

孙叫兽带你了解腾讯位置服务的认证与接入,多种行业方案参考!

前言:腾讯位置服务为各类应用厂商和开发者提供领先的LBS服务和解决方案;有针对Web应用的JavaScript API, 适合手机端Native APP的各种SDK, WebService接口,适合小程序的插件和各类地图API等。 目录 接入指南 地图组件(H5) 地图javaScri

svn切换分支 如何判断 是否完成_SVN创建分支/合并分支/切换分支

在建立项目版本库时,可首先建好项目文件夹,并在其中建立trunk, branches, tags三个空的子目录。这样在trunk中开始进行开发trunk是主分支,是日常开发进行的地方。branches是分支。一些阶段性的release版本,这些版本是可以继续进行…

java文件读写操作类

借鉴了项目以前的文件写入功能,实现了对文件读写操作的封装 仅仅需要在读写方法传入路径即可(可以是绝对或相对路径) 以后使用时,可以在此基础上改进,比如: 写操作: 1,对java GUI中文…

java递归基础掉用_Java递归基础

java递归基础掉用对于那些不知道递归是什么的人(并且像个大笑者一样),请单击以下链接:Google搜索:递归,然后单击“您的意思是……”项。 希望您终于弄清楚了递归是指其自身的任何内容(如果不是&…

圣诞节,程序员应该给女朋友送一个线上圣诞树

前言:圣诞节虽然不是中国的传统节日,但当下很多时髦的年轻人却很喜欢过这个欢乐的节日,并乐于打造参与属于这个节日的仪式感。 除了所知的圣诞老人、圣诞树、互送礼物、吃大餐等传统习俗外,其实程序员能为今天的节日增加一些特别的环节。 圣诞树下载:https://download.csd…

maven 按业务拆分模块_Maven模块拆分方法

一个大项目经常要拆分成多个小模块分开打包,Maven是可以支持模块拆分的。可以包含(父模块即项目包含子模块),也可以并行(父模块和子模块是平级的)。推荐用包含方式,更清晰,更简单一些。首先建个空项目,只要个pom.xml&a…

用户注册,报修

一、需求分析 (1)还没有注册的客户,可以进入注册界面进行注册。 (2)新建一个报修表,名字为repair_info0,列有用户名、报修类型、报修地点、报修内容,报修日期和时间、用户报修次数。…

Java SE 8新功能介绍:使用Streams API处理集合

使用Java SE 8 Streams的代码更干净,易读且功能强大..... 在“ Java SE 8新功能介绍”系列的这篇文章中,我们将深入解释和探索代码,以了解如何使用流遍历集合,从集合和数组创建流,聚合流值。 在上一篇文章“ Lambda的…

在HTML中使用css3实现雪人动画效果

背景:圣诞节又到了,拿什么来哄女朋友开心? 项目结构: html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xht…

mysql 释放内存_mysql查询后释放内存

我正在使用CodeIgniter从远程服务器导入大表.我一次将查询分成1000行.这将是一个在后台运行的cron脚本.$userDB是本地数据库对象,而$remoteDB是远程数据库对象private function fetch_remote_db_table($remoteDB, $remoteTable, $localTable FALSE){$success FALSE;$returnOb…

linux线程池简单实例

linux线程池简单实例转载于:https://www.cnblogs.com/adong7639/p/5044685.html

圣诞节又到了,作为程序猿的我用代码给女朋友送了一个礼物

圣诞节又到了&#xff0c;拿什么来哄女朋友开心&#xff1f;我们先来做一个简单的雪人动画&#xff1a;项目结构&#xff1a;html:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.d…

【Linux】权限篇(二)

权限目录 1. 前言2. 权限2.1 修改权限2.2 有无权限的对比2.3 另外一个修改权限的方法2.3.1 更改用户角色2.3.2 修改文件权限属性 3. 第一个属性列4. 目录权限5. 默认权限 1. 前言 在之前的一篇博客中分享了关于权限的一些知识&#xff0c;这次紧接上次的进行&#xff0c;有需要…

mysql 替代like_mysql用instr替代like查询

使用内部函数INSTR&#xff0c;代替传统的LIKE方式查询&#xff0c;不仅速度更快&#xff0c;而且省去了通配符检查&#xff0c;因此更加安全。INSTR()函数返回字符串中子字符串第一次出现的位置。如果在str中找不到子字符串&#xff0c;则INSTR()函数返回零(0)。下面说明了INS…

项目实战:小米商城官网及秒杀高仿(html+css+js)

导读:秒杀的检索结果,小米官方网站包含秒杀价格及秒杀适配机型,官方推荐秒杀产品,帮助米粉挑选合适自己的秒杀商品。 仿小米手机商城的全套页面。包含首页,订单页,列表页,商品详情页,个人中心,购物车,等等几十个页面。 有轮播的实现,demo 基于html css 实现小米官网部分内容搭…

Unity3d 配置OpenCV(EmguCV) 周围环境

最近毕业。我们一直在研究如何Unity正在使用EmguCV&#xff0c;最后&#xff0c;有些吃老本的今天。 我的环境&#xff1a;Unity3d 4.3.1f libemgucv-windows-universal-gpu-2.4.9.1847 原文參考&#xff1a;http://forum.unity3d.com/threads/182600-OpenCV-(EMGUC…

Java 8的方法参考进一步限制了重载

方法重载一直是一个充满喜忧参半的话题。 我们已经在博客上介绍了它&#xff0c;并介绍了几次警告&#xff1a; 您会后悔对Lambdas应用重载&#xff01; 保持干燥&#xff1a;方法重载 为什么每个人都讨厌操作员超载 API设计师&#xff0c;请小心 重载有用的主要原因有两个…

多态性(C#)

在面向对象编程中继承性和多态性是重要机制&#xff0c;前面我为大家分享了我对“类的继承”的理解&#xff0c;哪么今天我就跟大家分享下我对“多态性(C#)”的理解。 首先我们先来看看多态的定义&#xff0c;同一操作作用于不同的对象&#xff0c;可以有不同的解释&#xff0c…