这可能是导致删除的主观问题,但我真的想要一些反馈。
最近,我转到另一个非常大的企业项目,在那里我作为开发人员工作。我惊讶地发现项目中的大多数类都是从8K到50K行的长度,方法是1K到8K行。它主要是处理数据库表和数据管理的业务逻辑,充满了处理用例的条件语句。
这类在大型企业系统中是否常见?我意识到没有看代码很难做出决定,但是你曾经在一个有这么大类的系统上工作吗?
答案 0 :(得分:37)
以下是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行的IMHO。
答案 1 :(得分:14)
这绝对不对。对于单个工作单元,方法不应包含足够多的代码。类不应包含比与类实例的状态相关的方法更多的方法。
这太像God Object anti-pattern了。我个人会放弃该项目并寻找另一个项目。
答案 2 :(得分:9)
不看代码,实际上很容易做出决定。一个类永远不应该是40K行,永远不应该是一个方法甚至1K。通常情况下,如果我无法在一张纸上打印出方法并查看开始和结束括号,我会找到一种方法将其拆分。
我可能会问,他们是否正在使用OOP原则,或者他们是否尝试将Java更多地用作功能或程序语言?我无法想象一个真正的OOP项目有40K线路类。
答案 3 :(得分:6)
哦,我认为这是一个可怕的迹象,而且我不必看代码就这么说了。听起来像需要大量的重构努力。
让我猜一下 - 你也没有写过系统的单元测试。你有同情心。
答案 4 :(得分:5)
除了其他答案中描述的软件维护问题外,请注意编译的Java方法可能不超过64k字节的技术限制。 (对应的代码行数将取决于行本身。)
答案 5 :(得分:4)
在Java开发的12年中,我可以诚实地说这很不寻常。
事实上;在超过25年的发展历程中,我从来没有遇到任何语言的那种大小的文件或类。
破解重构工具!
答案 6 :(得分:3)
要注意的一件小事是lines
,lines of code
和statements
之间的区别。如果您使用例如分析项目声纳你可以很容易地看出它们之间的区别。
尽管如此,无论具体措施如何,40k行业务代码 hideous 。
在我开发的企业应用程序的业务模块中,最高的数字是444行代码。这是一个相当大的服务。大多数服务类都有200到100行代码。实体(模型对象)在我们的情况下大多在40到100之间。
在同一个应用程序的另一部分中,我们有一个类是1224行代码(总共2477行,706个语句)。由于它的大小,这个类在团队中几乎普遍受到憎恨。它被认为是臃肿,复杂和做得太多。
现在,如果一个整个团队认为这个关于仅 2477行的类,这可能会让你对40k行类的憎恶有一些看法。
答案 7 :(得分:2)
当我读完这个时,警铃开始响起:
主要是业务逻辑处理 使用数据库表和数据管理, 充满条件陈述 处理用例。
如果此代码不在数据层中,并且没有关于如何访问数据库的抽象,则出现问题。我也感觉这些方法中的一些与找到它们的类没有直接关系。关于条件陈述和用例的评论也不合适。我会回应duffymo的评论,即需要进行一些重构。
答案 8 :(得分:0)
作为一名年轻的程序员,我仍然记得我的老师在编写代码之前告诉我们要分解大功能并进行良好的OO设计。
所以除非你的设计中有一个非常好的理由强加40k线(我强烈怀疑),那么你已经得到了答案:你的课程太大了。
我会引用我的妻子(化学家而不是程序员):“40k行代码,确实有问题!”
我有朋友在他们的公司里开展项目,这些项目真的很老,从一个程序员到另一个程序员,我们都同意的是,这个规模只是意味着:
-patch and fix:人们不得不在这里和那里做一些小改动,并且不想/没有时间做正确的事。
在运行时,该代码可能没有任何问题,一切正常,但通常在您想要进行任何形式的修改时出现问题:
找到任何东西需要很长时间
当有错误时,你无法轻易指出
...
总之,我会坐下来重新考虑你的项目的设计和重组(至少要开始1k~5k线课程),我知道通常从长远来看它很烦人
答案 9 :(得分:0)
50K行代码?我认为KLOC是项目规模的衡量标准,而不是文件大小。这就像我们的整个代码库(包括测试)。
我正在使用JavaScript,所以它不能直接比较,但我们只有很少的文件超过500行 - 这些是非常有问题的。
答案 10 :(得分:0)
我知道在尝试弄清楚它的功能和方法时遇到问题时,某些代码需要分解。或者如果它大于屏幕截图。
通常我会重构它,如果它让我感觉不好。我不喜欢感觉不好: - (
我怀疑代码失控了,因为管理层只是希望错误修正/功能完成而没有别的,而且它一点一点地慢慢变坏。
重构代码以使程序员工作更容易,他们的优先级列表可能不是很高。管理层昨天总是想要他们的错误修正/功能: - (
另外一个工作程序显然比破坏的程序更好,并且破解没有单元测试的大型代码将以灾难结束。所以在触摸代码之前必须进行所有测试。管理层不允许这样做的另一个原因。
答案 11 :(得分:0)
我认为你的骇然是合格的:)我无法想象该程序是否正确OOPified。类的分类有点难度,但方法很简单:每种方法有1种行为(这不是规则,但应该是这样)。行为不可能甚至接近1k行代码。至少,只要我的想象力会带我。
另一方面,类可以表示很多东西,但它们应该代表某些东西。如果很难告诉该类代表什么,那么你就会遇到问题。
现在,我想象你很清楚这些概念,我正在向合唱团讲道。所以,我只是假装我没有在那里切断并直接回答你的问题:
是。非常不幸的是,大型企业项目使代码变得懒惰是非常常见的。我从事过几乎同样大的项目(你拍摄的任何我从水中看过的东西),我的第一个倾向是开始把事情分解成逻辑组件,特别是在我打算做出改变的地方。我无法处理那种意大利面条,它太刺激了。