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

多线程编程反模式

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

相关文章

数据挖掘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版本,这些版本是可以继续进行…

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

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

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

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

用户注册,报修

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

在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…

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

圣诞节又到了&#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;有需要…

孙叫兽重磅推荐Chrome插件——CSDN浏览器助手

导读:解决你在浏览器上遇到的各种问题,无论你是学生小白、还是职场老鸟,都可以借助这个插件,打造个性化浏览器,提升工作学习效率。 此插件经过多轮迭代,体积小,内存占用少,便于开发者快速安装和使用。 官方地址:https://plugin.csdn.net/ 目录 安装方法:

【APICloud系列|21】使用APICloud敏捷式开发总结,回顾开发一个完整APP过程。

导读:APICloud是柚子(北京)科技有限公司创建的低代码开发平台,总部位于北京, 通过生产力工具与混合开发技术,为企业与开发者构建高效的IT环境;在APICloud平台已有80万注册用户,平台每日生成安装包超6000个。业务团队延伸至上海、深圳、重庆、青岛等10余个城市。 APICloud是…

数据湖 多维数据集_按汇总分组/多维数据集

数据湖 多维数据集时不时地&#xff0c;您会遇到一个使您达到SQL限制的要求。 我们中的许多人可能会早早放弃并使用Java / [或您的语言]计算内容。 相反&#xff0c;使用SQL可能是如此简单快捷。 如果您使用的是高级数据库&#xff0c;例如DB2 &#xff0c; Oracle &#xff0c…

FlexyPool如何同时支持连接代理和装饰器

代理人 FlexyPool监视连接池使用情况&#xff0c;因此需要拦截连接关闭方法调用。 为了简单起见&#xff0c;第一个版本为此目的依赖动态代理&#xff1a; private static class ConnectionInvocationHandler implements InvocationHandler {public static final String CLOS…

集合视图控制器(CollectionViewController) 、 标签控制器(TabBarController) 、 高级控件介绍...

1 创建集合视图&#xff0c;设置相关属性以满足要求 1.1 问题 集合视图控制器UIConllectionViewController是一个展示大量数据的控制器&#xff0c;系统默认管理着一个集合视图UICollectionView&#xff0c;功能几乎和UITableViewController差不多&#xff0c;能够以多行多列的…

【APICloud系列|24】 MNNavigationMenu模块(导航菜单)的实现

导读:MNNavigationMenu 是一个导航栏菜单,开发者可自定义其中的样式和按钮个数,超出屏幕部分可左右拖动查看。 模块详情:http://www.apicloud.com/mod_detail/12417 index.html <!doctype html> <html> <head><meta charset="utf-8">&…

mysql2教程_mySQL 教程 第2章 安装和介绍mySQL

设置mySQL字符集支持中文的字符集是utf8&#xff0c;该设置可以更改mySQL配置文件进行全局设置&#xff0c;也可以针对数据库设置&#xff0c;也可以针对表设置&#xff0c;也可以针对列设置。字符集更改后新插入的数据生效&#xff0c;对以前不生效。练习1&#xff1a;更改MyS…

java 更新订单状态_Java 8状态更新

java 更新订单状态即将到来的Java SE 8发行版的两大新语言功能是Lambda Expressions和Modularity。 这两天的状态更新都已经发布。 我会与您分享链接&#xff0c;因此您可能会在假期中通读它们 Oracle计划在2013年中期发布Java SE 8。 Lambda项目 Lambda项目以及JSR-335希望提…

基于JBoss Fuse 6.2的JBoss BPM微服务集成指南

今年年初&#xff0c;我们宣布了JBoss BPM Suite令人兴奋的示例项目&#xff0c;该项目围绕一个正在运行的在线Travel Agency项目展开。 最初是利用Web服务&#xff0c;后来我们在JBoss Fuse的帮助下迁移到微服务 。 随着JBoss Fuse 6.2的发布&#xff0c;我们希望重新访问该…

mysql zip 还原_mysql 压缩还原数据库

MySQL数据库备份和还原的常用命令其实很多情况下mysql备份就是采用了这些命令&#xff0c;例如&#xff1a;mysql导入和导出数据linux自动定时备份web程序和mysql数据库备份MySQL数据库的命令mysqldump -hhostname -uusername -ppassword databasename > backup...文章无声胜…

jvm调试工具_调试JVM

jvm调试工具在某些&#xff08;极少数&#xff09;情况下&#xff0c;您可能会遇到使JVM本身崩溃的情况。 我最近通过将ThreadGroup的名称设置为null来进行管理 。 在这些情况下&#xff0c;调试JVM本身很有用&#xff0c;这样可以更精确地定位崩溃。 这是执行此操作的步骤&…