Java中的嵌套数据结构(内部类)

时间:2013-08-01 09:31:17

标签: java data-structures inner-classes

在我们的应用程序中,方法通常会返回嵌套的数据结构。我们将它们表示为DTO,其中一个DTO可以包含其他DTO或其列表。有问题的方法主要是为GUI提供展示的东西。

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

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

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

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

所以基本问题是:

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

2 个答案:

答案 0 :(得分:2)

你可以做你的建议。如果要阻止其他人创建实例,可以使构造函数包为local或private。如果类也是公共的,您可以在任何地方访问这些方法,但只能在允许的地方构建它们。

答案 1 :(得分:0)

  1. 您可以使用内部类,但要使它们实现公共接口。
  2. 我建议的其中一个解决方案是继续使用标准方法(公共类作为字段),但禁止开发人员使用带有方面策略的类(这里是我发现的简短教程:http://www.jayway.com/2010/03/28/architectural-enforcement-with-aid-of-aspectj/)。使用方面,您可以做两件事:
    • 禁止使用您的课程
    • 告诉开发人员他们为什么不能使用它(使用政策警告文本)