【问题标题】:Nested Data Structures in Java (inner classes)Java中的嵌套数据结构(内部类)
【发布时间】:2013-08-01 17:45:51
【问题描述】:

在我们的应用程序方法中经常返回嵌套的数据结构。我们将它们表示为 DTO,其中一个 DTO 可能包含其他 DTO 或其列表。所讨论的方法主要为 GUI 提供要显示的内容。

到目前为止,“内部”DTO 是常规公共类的对象。开发人员很想在各种其他 DTO 类中重用这些内部 DTO。虽然这看起来像是一个受欢迎的代码重用应用程序,但它在仅松散相关的方法之间创建了不必要的依赖关系。

避免这种情况的一种方法是“展平” DTO,使得根本没有嵌套,所有属性都是简单的标量类型。然而,在许多情况下,这似乎是不自然的,例如当外部和内部 DTO 之间存在 1:n 关系时,导航这样的 DTO 会变得更加麻烦。

所以我们认为,我们可以创建内部类(外部 DTO 的类)的“内部”DTO 实例。这应该以减少代码重用为代价来减少依赖关系。

但后来我们注意到,除非我们将内部类公开,否则无法从外部访问内部类的方法(例如返回此类 DTO 的方法)。但随后任何人都可以创建这个内部类的实例(尽管它不那么诱人)。

所以基本问题是:

  • 以完全独立的方式表示嵌套数据结构的好方法是什么?

【问题讨论】:

  • 您可以通过将构造函数设为私有来轻松避免从外部创建内部类,因此只有封闭类可以创建某些内部类的新实例。

标签: java data-structures inner-classes


【解决方案1】:

你可以按照你的建议去做。如果您想阻止其他人创建实例,您可以将构造函数包本地或私有。如果这些类也是公共的,您可以在任何地方访问这些方法,但只能在您允许的地方构造它们。

【讨论】:

    【解决方案2】:
    1. 您可以使用内部类,但让它们实现公共接口。
    2. 我推荐的解决方案之一是保留您的标准方法(将公共类作为字段),但禁止开发人员将这些类与方面策略一起使用(这是我找到的简短教程:http://www.jayway.com/2010/03/28/architectural-enforcement-with-aid-of-aspectj/)。使用方面,您可以做两件事:
      • 禁止使用你的类
      • 告诉开发人员他们为什么不能使用它(使用政策警告文本)

    【讨论】:

      猜你喜欢
      • 2011-09-27
      • 1970-01-01
      • 2015-10-21
      • 2020-10-04
      • 1970-01-01
      • 2010-09-09
      相关资源
      最近更新 更多