我正在制作一个CRUD Web服务,而且我有对象(也是我系统中的数据库记录)让我们说客户有几十个属性。这些年来,一些属性可能会发生变化。在极少数情况下,它们可以重命名,我认为这不是问题,因为该内部实现和attribte名称不需要在界面中。但是会有新属性,我不知道如何正确处理它们。
我打算在架构中做这样的事情:
<xs:complexType name="tKeyValuePair">
<xs:sequence>
<xs:element name="fieldname" type="xs:string" />
<xs:element name="value" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="keyvaluepair" type="tKeyValuePair" />
<xs:complexType name="tKeyValuePairs">
<xs:sequence>
<xs:element ref="keyvaluepair" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:element name="fieldvalues" type="tKeyValuePairs" />
<xs:complexType name="tCustomerBase">
<xs:sequence>
<xs:element name="customername" type="xs:string" />
<!-- here are other fields that can't change but can be minOccurs="0"-->
<xs:element ref="fieldvalues" />
</xs:sequence>
然后我为每个扩展tCustomerBase的操作提供了一个类型,例如在tCustomerUpdate中添加customerid以进行更新,以充当找到正确客户的关键,在tCustomerCreate中添加createuser以插入到在其他系统中创建它的商店。
现在fieldvalues是字符串,我知道哪个字段应该是哪种类型,我可以在我的WS中的db-operation之前转换它们。
但这有意义吗?我应该使用
xsd:any
其他领域的某种方式?
使用
怎么样?xsd:anyType
我可以使用它而不是字符串作为键值对值的类型吗?我将非常感谢帮助如何做到这一点!
除了我的问题,我很乐意听到有关这种架构设计的任何评论。所以请随意评论我在这里写的模拟架构部分!
谢谢和最佳反馈-Matti