2013-08-01 19 views
1

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

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

避免这种情况的一种方法是“压平”DTO,使得根本不存在嵌套,并且所有属性都是简单的标量类型。然而,在许多情况下,这看起来不自然,例如,当外部和内部DTO之间存在1:n关系时,导航这样的DTO会变得更加麻烦。所以我们认为,我们可以制作内部类(外部DTO的类)的“内部”DTO实例。这应该以减少代码重用为代价来减少依赖性。

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

所以基本问题是:

  • 什么是代表一个完全自给自足的方式嵌套数据结构的好办法?
+1

您可以轻松地避免创建你的内心通过使构造函数的构造函数成为私有类来从外部类,所以只有封闭类可以创建一些内部类的新实例。 –

回答

2

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

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