【问题标题】:Can we apply the REP, CRP, CCP, etc. principles to Java packages as well as to JARs?我们能否将 REP、CRP、CCP 等原则应用于 Java 包和 JAR?
【发布时间】:2016-08-19 05:15:55
【问题描述】:

鲍勃大叔的OOD原理(http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod)描述:

  • 类设计的五项原则
  • 包设计六大原则(Release Reuse Equivalency Principle、The Common Closure Principle等)

文章指出:

在这种情况下,包是像 .jar 文件或 dll 一样的二进制交付物,而不是像 Java 包或 C++ 命名空间这样的命名空间。

这是否意味着这 6 条“包原则”适用于 Java 包(使用关键字 package 定义)?这是否意味着以这种方式应用它们是错误的?如果是这样,您能否指出在哪里可以找到这样的命名空间包原则?

【问题讨论】:

  • 它告诉您文档中使用的术语package 与java 包(就关键字而言)没有任何关系。至于第二个要点;我其实不知道你在问什么。 Wikipedia entry for Namespace 在非编程上下文中解释它。那里有很多好的实践,但没有命名空间本身的原则
  • 问题是另一篇文章 (objectmentor.com/resources/articles/granularity.pdf) 描述了完全相同的六种包装原则。但它说:在本文中,我们将......将这些高阶颗粒称为“包”。 ...术语“包”在 Ada 和 Java 圈子中很常见。在这些语言中,包用于表示可以导入其他程序的声明的逻辑分组。所以问题是:我们能否将 REP、CRP、CCP ... 原则应用于 java NS 包以及 java 档案 (JAR)?谢谢

标签: java oop packages package-design


【解决方案1】:

是的,包原则可以应用于单个 Java 包,或其他语言的等效类(或其他单个软件单元)分组。

The first article in Martin's series of articles about package principles, that about the Release Reuse Equivalency Principle,解释说这些原则是关于类的分组。它相当随意地选择“包”作为这些分组的名称,然后提到该词在 Ada 和 Java 中用于这些语言中特定类型的分组。我的结论是,这些原则适用于任何类分组,包括 Java 包。

其他人已成功地将包原则应用于 Java 包。 JDepend 根据 Java 包的包原则计算指标。我仍然怀念出色的工具 Optimal Advisor,它在包依赖关系图上显示了这些指标,以帮助重构。我发现它们都有助于识别违反包原则的包,并确认我何时通过重构修复了这些违规行为,例如将类移动到适当的包中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    • 2018-02-20
    • 1970-01-01
    • 2014-09-24
    相关资源
    最近更新 更多