【问题标题】:Structural design pattern结构设计模式
【发布时间】:2012-02-06 22:04:58
【问题描述】:

我正在使用三个不同的类:Group、Segment 和 Field。每个组是一个或多个段的集合,每个段是一个或多个字段的集合。有不同类型的字段是 Field 基类的子类。还有不同类型的段,它们都是 Segment 基类的子类。子类定义了段中预期的字段类型。在任何段中,定义的某些字段必须输入值,而某些字段可以省略。我不确定在哪里存储此元数据(段中的给定字段是可选的还是必需的。)

存储此元数据最简洁的方式是什么?

【问题讨论】:

  • 如果字段是一个类,你可以存储一个标志作为成员,指示它是可选的还是强制的?然后 Segment 类可以在创建新字段时在字段上设置它。
  • 是的,可以的。不知道为什么我没有想到这个......

标签: java design-patterns


【解决方案1】:

我不确定您是否提供了有关完整应用程序的足够信息以获得最佳答案。然而,这里有一些可能的方法:

  1. 在您的基类中定义一个 isValid() 方法,该方法默认返回 true。在您的子类中,您可以为每个 Segment 或 FieldType 编写特定逻辑,以在缺少任何要求时返回 false。如果您想报告错误消息以说明缺少哪些字段,您可以在 isValid 方法中添加一个 List 参数,以允许每种类型报告缺失值的列表。

  2. 使用注释(正如 AlexR 上面所说的)。

上述两种方法的好处是元数据在代码中,直接与需要它的对象相关联。缺点是如果要更改必填字段,则需要更新代码并部署新的构建。

如果您需要可以即时更改的内容,那么 Gangus 建议的 Xml 是一个好的开始,因为您的应用程序可以在运行时重新加载 Xml 定义并产生不同的验证结果。

【讨论】:

    【解决方案2】:

    我认为,此类数据的最佳放置位置是普通的 XML 文件。对于此类数据,最好的结构也是带有 XPATH 的 XMLDOM。使用类会太复杂。

    【讨论】:

      【解决方案3】:

      自从 java 5 发布以来,这种元数据可以使用注释来存储。定义自己的注解@MandatoryField 并用它标记所有必填字段。然后你可以使用反射逐个字段地发现对象,并检查未启动的字段是否是强制性的并在这种情况下抛出异常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-17
        相关资源
        最近更新 更多