道金斯科普三部曲
遇见敌人。
冒着热气的臭丛林粉碎了您的周围,昆虫在空中蔓延,奇怪的咕unt声在树叶中颤抖,您深深地停留在未知的重构中,没有喘息的机会,没有家,也没有帮助。 汗水从所有毛Kong渗出。 您的砍刀因一万次砍伐而开凿和钝化,疲惫不堪地垂在您已老茧的握柄中,而您的脑袋却自言自语,筋疲力尽。 在您的身后,没有任何记录下来的记录:无数的葡萄藤被割断,无数的依赖被撕毁,无数的破烂阶级搁置一旁,这些都没有改变缠结的疯狂。 您的所有烦恼的重组似乎都是浪费,毫无意义,这是因为粗野的野蛮人爬上树丛而行。
然后,您会看到黑暗。 劳碌时,您并没有注意到它,它形成了一个广阔而微妙的阴影。 恐惧充斥着你的灵魂。 您交错地穿过树林,被恐怖吸引,每一步的灯光都开始失效。 轻率的砍伐不能使野猪远离肉体,但会继续前进。 你必须看到它。 您必须看到它。 最后一堵粘稠的植被墙会绊倒你。 远景在您面前打开。 怪物展现自己。
上帝反对。 巨大的野兽从森林地面蔓延到树冠,令人窒息,窒息了天空。 卷须到处都是蛇,从中央的密集处散发出来,窒息了他们接触的每个阶层。 更糟糕的是,肥大的结实的依赖性从四面八方朝着神物的巨大核心撞击,扭曲,盘绕和刺穿的疯狂。
打败了,你崩溃了到膝盖,弯刀从你的手中溢出。 绝望一跳。 你低下头。 在那里,在您面前的地面上,有些东西闪闪发光,有些东西银色,并且位置不正确。 利用您的最后力量,您可以伸出手来捡起金属标签。 微弱的写作打分表面。 它显示为“ MavenProject.java”。
规模和目击。
一类五百行的电话可能会遇到一些开玩笑,严厉的审问。 但是,如果有经验的设计师证明其合理性,也可以进行审查。 这些事情总是有原因的。 然而,在一千行长的情况下,一门课已经跨越了潜规则。 好味道被冷落了,侮辱了良种。 有人在品尝葡萄酒时掏出一罐啤酒。 一千行似乎太分手了。 这个班级真的集中于一个单一但又巨大的责任,以至于不能将其一分为二吗真当一千五百列警车从出租车上驶向审稿人的红地毯时,“最讨厌的评论”肯定是“最愚蠢的”。 狗仔队给照相机拍照,但难以置信而不是钦佩却促使他们旋转百叶窗。
两千行-也许只是-表示敬虔的提升。 它可能无法容纳程序的大多数功能,但是亲爱的,哦,亲爱的班级足够聪明,可以在挥舞刀片式审稿人之后逃脱审稿人,并且如此之大,几乎值得一两个神rine树立。 这样的类可以证明其自身的不可分解性是合理的,即使是最容易受骗的软件架构师也无法相信。
此外,上帝的对象分为两类。 第一个是自治的神物,尽管它在所有良好的结构原理上都尖叫着痴呆的虐待,但至少有自己的风度,被隔离在某个角落。 很少有类依赖于这种上帝对象。 一个或两个其他类必须使它生效,之后它将大胆地做大量的工作,但是至少将其拆分为较小的类不会准确地遍历整个系统,因为很少有其他类依赖它。 它的相对隔离使这种类型的上帝对象成为两种邪恶中较小的一种。 第二类公共神对象拥有大量的依赖类。 这种类型可以有二十,三十甚至四十个直接依赖于它的其他类,当程序员尝试分解时,所有这些类都遮住眼睛并通过咬紧的牙齿吸气。 在接近这些神物的地板时,聆听紧缩的嘎吱作响的声音,这些碎片散落在破碎的职业中。 你见过一个吗您见过公共神的物件吗如果没有,请坐下来,发现一些难以忍受的东西……
看哪,戈贡!
图1:MavenProject神对象。
没有图像可以保证野兽的存在。 结构图只能引起不回答问题。 粗略地浏览 类本身会发现完整的2200行代码,是某些人认为大小的四倍,实际上是一个独立的程序包。 问题是:当面对这样的挫伤时,您应该怎么办程序员通常做以下三件事之一。 首先,他们可能只是换个角度看,是一个通用的解决方案。 其次,他们可能会开始淘汰较小的类中可以使用的方法。 两种选择都有其优点。
但是,第三个选择经常被忽略。 此选项承认神物的动力。 他们之所以如此之大,是因为他们这样做:他们得以成长。 他们很少停滞不前,而且通常不会因为您决定介入并控制自己而停止吞噬功能。
在持续增长的假设下,第二种选择似乎摇摇欲坠:就像九头蛇一样,上帝对象注视着您砍下的课程,他们很快就开始扭动,吞噬和成长。 内聚性降低,并且所有这些依赖性直接串入新的实现类中,耦合成为问题。 第三个选项建议您不要完全减小上帝对象的大小。 至少在最初。 取而代之的是,您仅开始创建由God对象实现的小接口,并且以前上帝对象的客户端将其注意力重定向到这些接口。 对于这些小型接口的性质存在意见分歧。
一个阵营建议分析上帝对象的功能,并在语义上对其进行分组。 这具有保持新接口不相交,不共享公共功能声明的优点,但是具有使客户端接收其可能不会使用的所有功能的接口的缺点。 另一阵营建议为每个客户端程序包(或重要类)创建一个新接口,使这些接口比特定于提供程序的客户端更多。 这样做的好处是客户端可以完全准确地使用它们接收的接口,但是缺点是许多接口可能声明相同的功能。
实际上,有些方法从第二种方法开始,并在完成后将重复的函数声明收集到公共的扩展接口中。 无论取得什么成就,这只是第一步。 一旦倒数第二个对神物体的依赖性突然断裂,刀子仍应保持护套。 必须首先将野兽设为程序包专用(Java的默认访问修饰符),以便将来的客户端无法绕过接口,然后最好将其移至其自己的新程序包中,而将接口留在后面。 只有到那时,当上帝的物体与其他物体隔离开来,并且界面现在以立面的形式展现出来时,解剖才能开始。 听起来可能需要做很多工作。 它是。 没有人说这会很容易。
但是,最终的配置提供了到客户端的接口外观,这些客户端不受解耦的实现重构的困扰,并提供了一个单独的程序包,从程序中发出的异常尖叫声在整个程序中散发出来。 一阵子。 只是为了好玩,我们可以对类进行X射线检查以查看其胆量。 大型类通常会建议它们自己的提取,并且如图2所示, 函数看起来很诱人。
图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
道金斯科普三部曲
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91308 人正在系统学习中 相关资源:软件标书范本(技术部分)_软件技术标书-项目管理文档类资源-CSDN文库
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!