RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1502896
Accepted
Зонтик
Зонтик
Asked:2023-03-07 19:44:24 +0000 UTC2023-03-07 19:44:24 +0000 UTC 2023-03-07 19:44:24 +0000 UTC

为什么标准 Java 库中的类中有这么多代码?

  • 772

有一个很好的规则叫做правило 10 - 50 - 500。这意味着理想情况下:

  1. 包中的类不应超过十个;
  2. 方法不超过50行;
  3. 班级不超过500行;

如果你没有强烈违反这条规则,那么,当然,这没有错。

有jdk档案这样的东西src.zip。它有.java-files,您可以在其中看到 -libraries 中类的实现java。java这是当我在 IDE 中单击我的代码中的任何类的名称时 IDE 显示代码的地方。

令我震惊的是,类中有大量代码,一个包中有大量类。有的班级行数接近4000行,一包班级数多到半屏都放不下!

例如,这里java.io.ObjectInputStream是包java.io:

这是什么?

这是为什么?它以前sun和现在是如何解释的oracle?毕竟这样的项目很难支撑,这样的代码有悖于编写干净代码的原则。我尝试着按照这个原理来创建类10 - 50 - 500,但是……在这之后,我已经怀疑这个原理的存在了。难道真实项目中真的没有这样的原理,对初学者来说都是虚构的吗?

PS:我真的希望有关于这个主题的引述和事实,而不仅仅是观点。

java
  • 1 1 个回答
  • 77 Views

1 个回答

  • Voted
  1. Best Answer
    tym32167
    2023-03-08T01:16:09Z2023-03-08T01:16:09Z

    因为业务服务应用程序和系统库有着完全不同的质量标准、不同的目的,甚至代码作者的专业水平也不同。

    如果您正在编写业务应用程序,那么应用程序的利润及其对不断变化的业务条件的响应速度是首要任务。在一个特定的应用程序中,只是扔掉部分代码或重写,甚至扔掉所有代码并从头开始重写并不丢人。平均而言,业务应用程序是为任务而编写的,任务更改 - 代码更改。此外,此类应用程序是由不同级别的程序员编写的,因此代码可读性在这里也起着重要作用。也就是说,对于业务应用程序来说,重要的是:代码的可读性、快速更改应用程序的能力,而应用程序的平均质量通常远非理想 - 性能下降或错误是常态。

    在库中,与业务不同,主要作用是类组合、性能、最少的错误数和向后兼容性。在这种情况下,没有来自业务的需求,只有某种库开发路线图。您不能只是重写所有内容并使其与以前的代码不兼容,如果事实证明您的内置排序适用于正方形,您将无法忍受它,您不能只使虚拟方法非-虚拟或删除一些公共方法或做其他破坏向后兼容性的事情。与业务应用程序不同,您的客户不会单击表单上的按钮,而是编写代码并通过重用您的数据结构将您的库集成到他们的产品中。

    因此,从理论上讲,业务应用程序代码应该反映业务流程,并以简单易懂的语言结构来表达。另一方面,库代码应该快速工作并保持向后兼容性,即可读性在那里也很重要,但不是多少,多少效率。

    因此,如果您正在编写业务应用程序代码,那么请听听 Bob 大叔的书。但是,如果您编写库,那么您的日常工具就是有关 OOP 和算法的参考书。如果你更深入地研究任何框架的源代码,那么你将看不到任何东西,无论是自写的 hashmams 还是自写的其他算法,它们都会像那样膨胀类,而这一切都是为了性能。好吧,当然,如果业务应用程序是由杂乱无章的团队根据“以更少的钱让我的软件工作更少”的原则编写的,那么先验库需要某种最低(但相当高)的技能水平,因为错误图书馆设计将活得更久,修复起来也更难。

    • 4

相关问题

  • wpcap 找不到指定的模块

  • 如何以编程方式从桌面应用程序打开 HTML 页面?

  • Android Studio 中的 R.java 文件在哪里?

  • HashMap 初始化

  • 如何使用 lambda 表达式通过增加与原点的距离来对点进行排序?

  • 最大化窗口时如何调整元素大小?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5