道金斯科普三部曲

遇见敌人。

冒着热气的臭丛林粉碎了您的周围,昆虫在空中蔓延,奇怪的咕unt声在树叶中颤抖,您深深地停留在未知的重构中,没有喘息的机会,没有家,也没有帮助。 汗水从所有毛Kong渗出。 您的砍刀因一万次砍伐而开凿和钝化,疲惫不堪地垂在您已老茧的握柄中,而您的脑袋却自言自语,筋疲力尽。 在您的身后,没有任何记录下来的记录:无数的葡萄藤被割断,无数的依赖被撕毁,无数的破烂阶级搁置一旁,这些都没有改变缠结的疯狂。 您的所有烦恼的重组似乎都是浪费,毫无意义,这是因为粗野的野蛮人爬上树丛而行。

然后,您会看到黑暗。 劳碌时,您并没有注意到它,它形成了一个广阔而微妙的阴影。 恐惧充斥着你的灵魂。 您交错地穿过树林,被恐怖吸引,每一步的灯光都开始失效。 轻率的砍伐不能使野猪远离肉体,但会继续前进。 你必须看到它。 您必须看到它。 最后一堵粘稠的植被墙会绊倒你。 远景在您面前打开。 怪物展现自己。

上帝反对。 巨大的野兽从森林地面蔓延到树冠,令人窒息,窒息了天空。 卷须到处都是蛇,从中央的密集处散发出来,窒息了他们接触的每个阶层。 更糟糕的是,肥大的结实的依赖性从四面八方朝着神物的巨大核心撞击,扭曲,盘绕和刺穿的疯狂。

打败了,你崩溃了到膝盖,弯刀从你的手中溢出。 绝望一跳。 你低下头。 在那里,在您面前的地面上,有些东西闪闪发光,有些东西银色,并且位置不正确。 利用您的最后力量,您可以伸出手来捡起金属标签。 微弱的写作打分表面。 它显示为“ MavenProject.java”。

规模和目击。

术语“上帝的对象”是许多对象。 所讨论的动物根本不是物体,而是一类动物,不是电驱动编排器通过高速总线对数据进行ping操作的编排,而是一个文本文件,尽管它很适中。 许多人也不太同意尊敬的Wikipedia的说法,即我们的采石场需要具有以下功能:……程序的大部分整体功能…编码为单个“全知”对象,该对象保留了有关整个程序的大部分信息,并提供了大多数处理这些数据的方法。” 考虑到当今的企业庞然大物,例如,一个拥有银行系统中更好部分的单一阶级将是一个奇妙的事情。 取而代之的是,大多数人会认为上帝对象是干得太多,职责太多或代码行太多的任何类。 这就引出了一个问题:什么太多了? 很少有人会认为一类两百行的文字实在是太过分了。 当然,可能是:存在异常值和稀有异常,但是仅凭其规模,合理的200行类别几乎不会引起怀疑。

一类五百行的电话可能会遇到一些开玩笑,严厉的审问。 但是,如果有经验的设计师证明其合理性,也可以进行审查。 这些事情总是有原因的。 然而,在一千行长的情况下,一门课已经跨越了潜规则。 好味道被冷落了,侮辱了良种。 有人在品尝葡萄酒时掏出一罐啤酒。 一千行似乎太分手了。 这个班级真的集中于一个单一但又巨大的责任,以至于不能将其一分为二吗? 真? 当一千五百列警车从出租车上驶向审稿人的红地毯时,“最讨厌的评论”肯定是“最愚蠢的”。 狗仔队给照相机拍照,但难以置信而不是钦佩却促使他们旋转百叶窗。

两千行-也许只是-表示敬虔的提升。 它可能无法容纳程序的大多数功能,但是亲爱的,哦,亲爱的班级足够聪明,可以在挥舞刀片式审稿人之后逃脱审稿人,并且如此之大,几乎值得一两个神rine树立。 这样的类可以证明其自身的不可分解性是合理的,即使是最容易受骗的软件架构师也无法相信。

此外,上帝的对象分为两类。 第一个是自治的神物,尽管它在所有良好的结构原理上都尖叫着痴呆的虐待,但至少有自己的风度,被隔离在某个角落。 很少有类依赖于这种上帝对象。 一个或两个其他类必须使它生效,之后它将大胆地做大量的工作,但是至少将其拆分为较小的类不会准确地遍历整个系统,因为很少有其他类依赖它。 它的相对隔离使这种类型的上帝对象成为两种邪恶中较小的一种。 第二类公共神对象拥有大量的依赖类。 这种类型可以有二十,三十甚至四十个直接依赖于它的其他类,当程序员尝试分解时,所有这些类都遮住眼睛并通过咬紧的牙齿吸气。 在接近这些神物的地板时,聆听紧缩的嘎吱作响的声音,这些碎片散落在破碎的职业中。 你见过一个吗? 您见过公共神的物件吗? 如果没有,请坐下来,发现一些难以忍受的东西……

看哪,戈贡!

图1:MavenProject神对象。

没有图像可以保证野兽的存在。 结构图只能引起不回答问题。 粗略地浏览 MavenProject类本身会发现完整的2200行代码,是某些人认为MavenProject大小的四倍,实际上是一个独立的程序包。 问题是:当面对这样的挫伤时,您应该怎么办? 程序员通常做以下三件事之一。 首先,他们可能只是换个角度看,是一个通用的解决方案。 其次,他们可能会开始淘汰较小的类中可以使用的方法。 两种选择都有其优点。

但是,第三个选择经常被忽略。 此选项承认神物的动力。 他们之所以如此之大,是因为他们这样做:他们得以成长。 他们很少停滞不前,而且通常不会因为您决定介入并控制自己而停止吞噬功能。

在持续增长的假设下,第二种选择似乎摇摇欲坠:就像九头蛇一样,上帝对象注视着您砍下的课程,他们很快就开始扭动,吞噬和成长。 内聚性降低,并且所有这些依赖性直接串入新的实现类中,耦合成为问题。 第三个选项建议您不要完全减小上帝对象的大小。 至少在最初。 取而代之的是,您仅开始创建由God对象实现的小接口,并且以前上帝对象的客户端将其注意力重定向到这些接口。 对于这些小型接口的性质存在意见分歧。

一个阵营建议分析上帝对象的功能,并在语义上对其进行分组。 这具有保持新接口不相交,不共享公共功能声明的优点,但是具有使客户端接收其可能不会使用的所有功能的接口的缺点。 另一阵营建议为每个客户端程序包(或重要类)创建一个新接口,使这些接口比特定于提供程序的客户端更多。 这样做的好处是客户端可以完全准确地使用它们接收的接口,但是缺点是许多接口可能声明相同的功能。

实际上,有些方法从第二种方法开始,并在完成后将重复的函数声明收集到公共的扩展接口中。 无论取得什么成就,这只是第一步。 一旦倒数第二个对神物体的依赖性突然断裂,刀子仍应保持护套。 必须首先将野兽设为程序包专用(Java的默认访问修饰符),以便将来的客户端无法绕过接口,然后最好将其移至其自己的新程序包中,而将接口留在后面。 只有到那时,当上帝的物体与其他物体隔离开来,并且界面现在以立面的形式展现出来时,解剖才能开始。 听起来可能需要做很多工作。 它是。 没有人说这会很容易。

但是,最终的配置提供了到客户端的接口外观,这些客户端不受解耦的实现重构的困扰,并提供了一个单独的程序包,从程序中发出的异常尖叫声在整个程序中散发出来。 一阵子。 只是为了好玩,我们可以对MavenProject类进行X射线检查以查看其胆量。 大型类通常会建议它们自己的提取,并且如图2所示, deepCopy()函数看起来很诱人。

图2:MavenProject的功能。

摘要。

上帝反对:不要。

照片信用归因。

  • CC Image Jungle和《太阳报》由Flickr上的yassina提供。
  • CC Image 珀尔修斯(Perseus)在Flickr上的莫尼托西(Monitotxi)赢得了美杜莎(Medusa)的称赞。
参考:我们的JCG合作伙伴埃德蒙·基万(Edmund Kirwan)在有关软件的A博客上介绍了关于 神物的 道金斯 。 博客。

翻译自: https://www.javacodegeeks.com/2013/04/going-dawkins-on-god-objects.html

道金斯科普三部曲

道金斯科普三部曲_道金斯在神的物体上相关推荐

  1. 朴素贝叶斯python代码_朴素贝叶斯模型及python实现

    1 朴素贝叶斯模型 朴素贝叶斯法是基于贝叶斯定理.特征条件独立假设的分类方法.在预测时,对输入x,找出对应后验概率最大的 y 作为预测. NB模型: 输入: 先验概率分布:P(Y=ck),k=1,2, ...

  2. 人大金仓删除字段_人大金仓数据库(kingbase7d)操作入门指南 Windows

    1.1.12 安装成功,在开始菜单中可以看到以下数据库操作工具: 1.2 数据库卸载 1.2.1 选择 卸载 : 1.2.2 点击 卸载 : 1.2.3 选择 确定 ,开始数据库的卸载 : 1.2.4 ...

  3. 阿蒙森 斯科特_三个斯科特的故事值得一听...

    阿蒙森 斯科特 Carl Franklin forwarded this along which contained a few fun things. 卡尔·富兰克林(Carl Franklin)转 ...

  4. 奥的斯3100电气图纸_奥的斯OTIS 电梯电气原理图分析

    前言: OTIS3000 系列电梯分几种不同的控制柜形式,这里分析的是采用 MCS220M 类型控制柜的 3100 和 3200 型电梯电气原理图.跟我们早前进行的 TOEC-40 相比,这部分的工作 ...

  5. 奥的斯3100电气图纸_奥的斯otis 3200电气原理图及序号与符号说明

    有关奥的斯otis 3200电气原理图及序号与符号,奥的斯otis 3200电气原理图中用到的序号与符号的中文解释,包括操纵盘.负载开关.报警按钮.断路器等的序号符号说明. 奥的斯otis 3200电 ...

  6. 奥的斯3100电气图纸_奥的斯OTIS3000电气原理图分析教程

    OTIS3000系列电梯分几种不同的控制柜形式,这里分析的是采用MCS220M类型控制柜的3100和3200型电梯电气原理图.跟我们早前进行的TOEC-40相比,这部分的工作要艰难得多了,所以也请大家 ...

  7. 奥的斯3100电气图纸_奥的斯OTIS3000电梯电气原理图分析

    前言: OTIS3000 系列电梯分几种不同的控制柜形式,这里分析的是采用 MCS220M 类型控制柜的 3100 和 3200 型电梯电气原理图.跟我们早前进行的 TOEC-40 相比,这部分的工作 ...

  8. 奥的斯3100电气图纸_奥的斯otis 3200电气原理图代号说明

    序号 符号 注解 1 2COP 副操纵盘 2 2SCB 副操纵盘声响按钮 3 LW30 25%负载开关 4 LW50 50%负载开关 5 ACSC 防犯罪开关 6 ALB 报警按钮 7 ALC 报警信 ...

  9. 原文 葛底斯堡宣言_葛底斯堡演说中英对照全文

    this continent 大陆 ['k ɔ ntin ə nt] , a new nation ['nei ʃə n] 国家 , conceived(conceive [k ə n'si:v] 构 ...

最新文章

  1. 《Spark大数据分析:核心概念、技术及实践》一3.6 惰性操作
  2. 关于JavaScript的编译原理
  3. win10无法运行C语言文件,主编告诉你win10打不开pdf文件的详尽处理办法
  4. 民生银行 一码付 php,PHP开心码支付免签约第四方支付平台源码修复版
  5. create-react-app 脚手架工具完善自己所需要的入口文件
  6. 高保真原型、动画引导、用户登录、巡检任务、维保任务、用户中心、历史记录、帮助中心、清除缓存、任务抽检、扫描二维码、待办事项、账号设置、客服信息、交互说明、手机端、小程序、app原型、BIM信息综合管理
  7. 站在物联网风口,如何抢滩千亿级智能家居市场?
  8. 转:12种JavaScript MVC框架之比较
  9. python跳出if_python跳出if
  10. 《算法》第4版 导读
  11. 随机身份证号码计算年龄
  12. 充电器pps功能是什么_科普:PPS充电器为何不兼容笔电?
  13. 开源人脸识别项目 —— face_recognition
  14. rstudio查询命令_Rstudio 常用命令
  15. 电脑it族宝典常用电脑的从怎样保护自己的眼睛
  16. c语言编码任务描述,C语言委派任务问题代码及解析
  17. 凌恩生物明星产品:一文读懂细胞器基因组!
  18. 笔记本启动显示0xc000014c错误--提示缺失win10/system32内部文件
  19. zabbix 监控过程详解
  20. ​华为NTP配置命令

热门文章

  1. 数据库mysql学习第一天
  2. 手机触摸pass测试软件,PaperPass手机版
  3. 用火狐浏览器快速扒网页图片素材
  4. 【总结】最全1.5万字长文解读7大方向人脸数据集v2.0版,搞计算机视觉怎能不懂人脸...
  5. 为什么30岁的工程师容易跳槽?
  6. 【转载】如何学习STM32?STM32入门学习经验总结
  7. 安装windows远程桌面服务器,如何安装应用,以便在 Windows Server 远程桌面服务中使用...
  8. Windows7 MSDN原版ISO镜像
  9. Qt下实现录制麦克风声音
  10. 即将到来的星期二-dasBlog 2.0和Medium Trust