我的应用程序接收XML消息以更新它的数据对象。 XML消息包含有关如何修改数据的详细信息。 XML看起来像:
<data>
<stuff> .... </stuff>
<stuff> .... </stuff>
<objs>
<obj attr1=... attr2=... />
<obj attr1=... attr2=... />
</objs>
</data>
我应该如何更新对象的字段?
创建一个modify(String xml)方法。解析消息,提取<stuff>
数据,然后将以下<obj attr1=... />
重构为String并传递给modify()。
创建一个modify(NamedNodeMap xml)方法。解析消息,提取<stuff>
数据,保留解析结果(Document对象),找到相关节点并传递给modify()。
创建一个modify(String attr1,String attr2,...)方法。解析XML,提取字段,传入modify()。可能是一个非常糟糕的主意,因为如果我需要更多属性,我需要更改方法签名,并打破依赖于modify()方法的所有内容。
为每个字段创建setter。解析XML,然后单独设置字段。然后我们进入整个getter和setter辩论,在这个应用程序的上下文中,我的数据对象的字段只能由这些XML消息修改,而不是其他地方。
就个人而言,我在1和2之间徘徊。我认为1会更灵活,如果我们决定不使用DOM,我可以更改在String(String xml)方法中解析String的方式。但是我必须解析XML两次,一次获取<stuff>
数据,然后将XML重构为String,并在modify()方法中再次解析。
XML解析甚至可以在我的数据类中完成吗?有没有理由选择其他选择?感谢。
[编辑] 一般来说,在传递给方法之前我应该“解包”多少数据?
答案 0 :(得分:0)
我建议使用选项4,主要是因为您可能不希望数据对象与消息传输机制紧密相关。
如果您决定更改XML架构(或者如果您认为XML过于冗长,或者您想要包含加密等等),则使用选项1和2,那么您现在可能需要更改数据对象实现 - 选项3不好的原因相同。
您是否绝对肯定您当前的XML消息集将是数据发生变化的唯一原因?我的意思是真的绝对100%肯定没有人会不想使用XML?如果没有,那么请选择4.从接口(XML消息)中解耦实现(数据对象)是确保代码可维护的最佳方法。