设计抽象setter / modifier的数量

时间:2010-12-02 02:35:38

标签: java design-patterns setter

我的应用程序接收XML消息以更新它的数据对象。 XML消息包含有关如何修改数据的详细信息。 XML看起来像:

<data>
   <stuff> .... </stuff>
   <stuff> .... </stuff>
   <objs>
      <obj attr1=... attr2=... />
      <obj attr1=... attr2=... />
   </objs>
</data>

我应该如何更新对象的字段?

  1. 创建一个modify(String xml)方法。解析消息,提取<stuff>数据,然后将以下<obj attr1=... />重构为String并传递给modify()。

  2. 创建一个modify(NamedNodeMap xml)方法。解析消息,提取<stuff>数据,保留解析结果(Document对象),找到相关节点并传递给modify()。

  3. 创建一个modify(String attr1,String attr2,...)方法。解析XML,提取字段,传入modify()。可能是一个非常糟糕的主意,因为如果我需要更多属性,我需要更改方法签名,并打破依赖于modify()方法的所有内容。

  4. 为每个字段创建setter。解析XML,然后单独设置字段。然后我们进入整个getter和setter辩论,在这个应用程序的上下文中,我的数据对象的字段只能由这些XML消息修改,而不是其他地方。

  5. 就个人而言,我在1和2之间徘徊。我认为1会更灵活,如果我们决定不使用DOM,我可以更改在String(String xml)方法中解析String的方式。但是我必须解析XML两次,一次获取<stuff>数据,然后将XML重构为String,并在modify()方法中再次解析。

    XML解析甚至可以在我的数据类中完成吗?有没有理由选择其他选择?感谢。

    [编辑] 一般来说,在传递给方法之前我应该​​“解包”多少数据?

1 个答案:

答案 0 :(得分:0)

我建议使用选项4,主要是因为您可能不希望数据对象与消息传输机制紧密相关。

如果您决定更改XML架构(或者如果您认为XML过于冗长,或者您想要包含加密等等),则使用选项1和2,那么您现在可能需要更改数据对象实现 - 选项3不好的原因相同。

您是否绝对肯定您当前的XML消息集将是数据发生变化的唯一原因?我的意思是真的绝对100%肯定没有人会不想使用XML?如果没有,那么请选择4.从接口(XML消息)中解耦实现(数据对象)是确保代码可维护的最佳方法。