我正在维护一个40K行长的Java类..问题?

这可能是导致删除的主观问题,但我真的想要一些反馈。

最近,我转到另一个非常大的企业项目,我作为开发人员工作。 我惊讶地发现项目中的大多数课程的长度从8K到50K不等,方法长度为1K到8K。 它主要是处理数据库表和数据管理的业务逻辑,充满了处理用例的条件语句。

这类在大型企业系统中是否常见? 我意识到没有看代码很难做出决定,但是你曾经在一个有这么大类的系统上工作吗?

以下是JDK 6中按行计数7209 .java文件的十大类。 这些类包含大量的注释,这些注释可能比代码长。

4495 ./javax/sql/rowset/BaseRowSet.java 4649 ./java/awt/Container.java 5025 ./javax/swing/text/JTextComponent.java 5246 ./java/util/regex/Pattern.java 5316 ./javax/swing/JTree.java 5469 ./java/lang/Character.java 5473 ./javax/swing/JComponent.java 9063 ./com/sun/corba/se/impl/logging/ORBUtilSystemException.java 9595 ./javax/swing/JTable.java 9982 ./java/awt/Component.java 

我同意一个打印的页面足够长的方法。 真的应该需要超过10K行的抄本。

这绝对不对。 对于单个工作单元,方法不应包含足够多的代码。 类不应包含比与类实例的状态相关的方法更多的方法。

这太像神对象的反模式 。 我个人会放弃该项目并寻找另一个项目。

不看代码,实际上很容易做出决定。 一个class级永远不应该是40K行,永远不应该是一个方法甚至1K。 通常情况下,如果我无法在一张纸上打印出方法并查看开始和结束括号,我会找到一种方法将其拆分。

我可能会问,他们是否正在使用OOP原则,还是他们试图将Java更多地用作function或程序语言? 我无法想象一个拥有40K线路级别的真正OOP项目。

哦,我认为这是一个可怕的迹象,我不必看代码这么说。 听起来需要大量的重构努力。

让我猜一下 – 你也没有对系统进行unit testing。 你有同情心。

除了其他答案中描述的软件维护问题之外,请注意编译的Java方法不得超过64k字节的技术限制。 (对应的代码行数将取决于行本身。)

http://www.databasesandlife.com/java-method-64k-limit/

在Java开发的12年中,我可以诚实地说这是不寻常的。

事实上; 在25年的开发过程中,我从来没有遇到任何语言的那种大小的文件或类。

破解重构工具!

要注意的一件小事是lines of codestatements之间的区别。 如果您使用例如Sonar分析您的项目,您可以轻松地看到它们之间的区别。

然而,无论具体措施如何,40k行业务代码都是可怕的

在我开发的企业应用程序的业务模块中,最高的数字是444行代码。 这是一个相当大的服务。 大多数服务类都有200到100行代码。 实体(模型对象)在我们的情况下大多在40到100之间。

在同一个应用程序的另一部分中,我们有一个类是1224行代码(总共2477行,706个语句)。 由于它的大小,这个类在团队中几乎普遍受到憎恨。 它被认为是臃肿,复杂和做得太多。

现在,如果整个团队认为这是一个总共只有 2477行的类,那么这可能会让你对40k线类是什么样的憎恶有所了解。

当我读到这个时,一个警钟开始响起:

它主要是处理数据库表和数据管理的业务逻辑,充满了处理用例的条件语句。

如果此代码不在数据层中,并且没有关于如何访问数据库的抽象,则出现问题。 我也感觉这些方法中的一些与找到它们的类没有直接关系。 关于条件陈述和用例的评论也不合适。 我会回应duffymo的评论,即需要进行一些重构。

作为一名年轻的程序员,我仍然记得我的老师告诉我们在编写代码之前打破大function并完成一个好的OO设计。

因此,除非你的设计中有一个非常好的理由强加40k线(我强烈怀疑),那么你已经得到了答案:你的课程太大了。

我会引用我的妻子(他是化学家并且没有编程):“40k行代码,确实有问题!”

我有朋友在他们的公司里开展项目,这些项目真的很老,从一个程序员到另一个程序员,我们都同意的是,这个大小的类只是意味着:

– 补丁和修复:人们不得不在这里和那里进行微小的改变,并且不想/没有时间去做正确的事。

在运行时,该代码可能没有任何问题,一切正常,但是当您想要进行任何forms的修改时通常会出现问题:

  • 找到任何东西都需要很长时间

  • 当有错误时,你无法轻易指出它

总而言之,我会坐下来重新考虑你的项目的oo设计和重组(至少要开始1k~5k线的课程),我知道通常从长远来看它很烦人

50K行代码? 我认为KLOC是项目规模的衡量标准,而不是文件大小。 这就像我们的整个代码库(包括测试)。

我正在使用JavaScript,所以它不能直接比较,但我们只有很少的文件超过500行 – 这些都是非常有问题的。

我知道当我在弄清楚它的function和方法时遇到问题时,某些代码需要分解。 或者如果它大于屏幕截图。

通常我会重构它,如果它让我感觉不好。 我不喜欢感觉不好:-(

我怀疑代码失控,因为管理层只是希望错误修正/function完成而没有其他任何东西,而且它一点一点地慢慢变得更糟。

重构代码以使程序员工作更容易,他们的优先级列表可能不是很高。 管理层总是希望他们的错误修正/function昨天:-(

另外一个工作程序显然比破坏的程序更好,并且在没有unit testing的情况下分解大的代码将在灾难中结束。 所以在触摸代码之前必须进行所有测试。 管理层不允许的另一个原因。

我认为你的骇然是合格的:)我无法想象该程序是否正确OOPified。 类的分类有点难度,但方法很简单:每种方法有1种行为(这不是规则,但应该是这样)。 行为不可能甚至接近1k行代码。 至少,只要我的想象力会带我。

另一方面,类可以代表很多东西,但它们应该代表某些东西 。 如果很难分辨出课程代表什么 ,那么你就有问题了。

现在,我想象你很清楚这些概念,我正在向合唱团讲道。 所以,我只是假装我没有在那里切断并直接回答你的问题:

是。 非常不幸的是,大型企业项目使代码变得懒惰是非常常见的。 我从事过几乎同样大的项目(你拍摄的任何我从水中看过的东西),我的第一个倾向是开始把事情分解成逻辑组件,特别是在我打算做出改变的地方。 我无法处理那种意大利面条,它太刺激了。