2

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

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

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

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

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

所以基本问题是:

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

2 回答 2

3

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

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