java设计如何抽象一个setter/modifier
我的应用程序接收XML消息以更新其数据对象。XML消息包含有关如何修改数据的详细信息。XML看起来像:
<data>
<stuff> .... </stuff>
<stuff> .... </stuff>
<objs>
<obj attr1=... attr2=... />
<obj attr1=... attr2=... />
</objs>
</data>
如何更新对象的字段
创建一个modify(stringxml)方法。解析消息,提取
<stuff>
数据,然后将以下<obj attr1=... />
重构为字符串并传递到modify()创建一个modify(NamedNodeMap xml)方法。解析消息,提取
<stuff>
数据,保留解析结果(文档对象),找到相关节点并传递到modify()创建修改(字符串attr1、字符串attr2,…)方法解析XML,提取字段,传递到modify()。这可能是一个非常糟糕的主意,因为如果我需要更多属性,我需要更改方法签名,并破坏依赖于modify()方法的所有内容
为每个字段创建setter。解析XML,然后分别设置字段。然后,我们陷入了整个getter和setter的争论,在这个应用程序的上下文中,我的数据对象的字段应该只由这些XML消息修改,而不是在其他任何地方修改
就我个人而言,我在1和2之间挣扎。我认为1会更灵活,如果我们决定不使用DOM,我可以在modify(stringxml)方法中更改字符串的解析方式。但是接下来我必须对XML进行两次解析,一次获取<stuff>
数据,然后将XML重构为字符串,并在modify()方法中再次解析
XML解析甚至应该在我的数据类中完成吗?有什么理由选择其他选择吗?谢谢
[编辑] 通常,在传递到方法之前,我应该“解包”多少数据
# 1 楼答案
我建议选择4,主要是因为您可能不希望您的数据对象与消息传输机制联系如此紧密
对于选项1和2,如果您决定更改XML模式(或者如果您决定XML太冗长,或者如果您想包括加密等),那么您现在可能必须更改数据对象实现,这与选项3不好的原因相同
您是否绝对确定当前的XML消息集将是数据更改的唯一原因?我的意思是真的绝对100%确定没有人不想使用XML?如果没有,那么选择4。将实现(数据对象)与接口(XML消息)分离是确保代码可维护的最佳方法