首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
软件工程中的反面模式(anti-pattern)
时间:
2015-02-04 20:23:22
阅读:
158
评论:
0
收藏:
0
[点我收藏+]
标签:
软件设计
抽象倒置(Abstraction inversion):不把用户需要的功能直接提供出来,导致他们要用更上层的函数来重复实现
用意不明(Ambiguous viewpoint):给出一个模型(通常是OOAD,面向对象分析与设计)却没有指出用意何在
大泥球(Big ball of mud):没有清晰结构的系统
数据库式进程间通信(Database-as-IPC):使用数据库进行进程间通信,而不使用更轻量级的合适的机制。或者说,对于常规的进程间通信,不是去采用轻量得多的合适机制,而是将数据库用作消息队列。
镀金(Gold plating):在项目达到最高价值后还继续工作。
内部平台效应(Inner-platform effect):系统可自定义的太多,以至于成为一个软件开发平台的蹩脚的复制品。
输入问题(Input kludge):无法确定和实现对异常输入的处理
接口膨胀(Interface bloat):把一个接口做得过于强大以至于极其难以实现
魔力按键(Magic pushbutton):直接在接口的代码里编写实现,而不使用抽象
竞争风险(Race hazard):输出结果受到事件执行顺序和时机的影响,在多线程环境和分布式系统中可能发生
烟囱系统(Stovepipe system):过度聚集数据和功能,忽视了与其他系统和模块的共享
面向对象设计
贫血的域模型(Anemic Domain Model):仅因为每个对象都要有属性和方法,而在使用域模型的时候没有加入非OOP的业务逻辑
(BaseBean):继承一个工具类的功能,而不是委托给它
调用父类(Call super):需要子类调用父类被重定义的方法
圆还是椭圆问题(Circle-ellipse problem):基于变量的子类化关系进行子类化
循环依赖(Circular dependency):在对象或软件模块中,直接或间接引入循环依赖。
常量接口(Constant interface):使用接口定义常量
上帝对象(God object):在设计的单一部分(某个类)集中了过多的功能
对象粪池(Object cesspool):复用那些不满足复用条件的对象。对象池是一种管理对象的方法,在重复使用对象前,需要针对对象进行初始化,以避免上次使用后的状态等数据影响下次的使用
不羁的对象(Object orgy):没有成功封装对象,外部可以不受限制地访问它的内部
幽灵(Poltergeists):指这样一些对象,它们唯一的作用就是把信息传给其它对象
顺序耦合(Sequential coupling):指这样一些对象,它们的方法必须要按某种特定顺序调用
悠悠问题(Yo-yo problem):一个结构(例如继承)因为过度碎片化而变得难于理解
编程
偶然复杂度(Accidental complexity):向一个方案中引入不必要的复杂度
远隔作用(Action at distance):意料之外的在系统分离的部分之间交互
盲目信任(Blind faith):缺乏对bugfix的校验或对子函数返回值的正确性检查
船锚(Boat anchor):在系统中保留无用的部分
忙等待(Busy waiting):在等待的时候不断占用CPU,通常是因为采用了重复检查而不是适当的消息机制
缓存失败(Caching failure):错误被修正后忘记把错误标志复位
拜物编程(Cargo cult programming):由于对模式的盲目崇拜,在不理解的情况下就使用模式和方法,企图得到好的结果
靠异常编程(Coding by exception):当有特例被发现时才添加新代码去解决
隐藏错误(Error hiding):在显示给用户之前捕捉到错误信息,要么什么都不显示,要么显示无意义的信息
硬编码(Hard code):将对系统环境的假设写入实现中
熔岩流(Lava flow):保留不想要的(冗余的或是低质量的)代码,仅因为除去这些代码的代价太高或是会带来不可预期的结果
循环-switch序列(Loop-switch sequence)在循环结构中使用switch语句来编写连续步骤
魔幻数字(Magic numbers):在算法里直接使用数字,而不解释含义
魔幻字符串(Magic strings):直接在代码里使用常量字符串,例如用来比较,或是作为事件代码
自我复制(Repeating yourself):通过不断复制已有代码的模式或代码段进行编码;而非采用once and only once(抽取原则)
软代码(Soft code):在配置文件里保存业务逻辑而不是在代码中
面条代码(Spaghetti code):指那些结构上完全不可理解的系统,尤其是因为误用代码结构
霰弹枪手术(Shotgun surgery):开发人员一次性在一个多个实现的代码基中增加功能
方法论
拷贝粘贴编程(Copy and paste programming):拷贝(然后修改)现有的代码而不是构造通用的解决方案
黄金大锤(Golden hammer):认为自己最喜欢的解决方案是到处通用的(参见:银弹)
不可能因素(Improbability factor):认为已知的错误不可能发生
不是这里发明的(Not invented here):拒绝使用组织外的主意或方案
这里发明的(invented here):拒绝组织内部实现的创新或解决方案,通常因为对成员没有信心
不成熟的优化(Premature optimization):在编码的早期追求代码的效率,牺牲了好的设计、可维护性、有时甚至是现实世界的效率
转换编程法或巧合编程(Programming by permutation or programming by accident):试图通过连续修改代码再看是否工作的方式来解决问题
重新发明方的轮子(Reinventing the square wheel):已经有一个很好的方案了,又再搞一个烂方案来替代它
银弹(Silver bullet):认为自己最喜欢的技术方案能解决一个更大的问题
测试人员驱动开发(Tester driven development):需求来自bug报告的软件工程
来源于wikipedia
软件工程中的反面模式(anti-pattern)
标签:
原文地址:http://www.cnblogs.com/nova-/p/4273127.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!