我正在制作一个 CRUD Web 服务,并且我有对象(它们也是我系统中的数据库记录),假设客户有几十个属性。一些属性可能会在几年内发生变化。在极少数情况下,它们可以重命名,我认为这不是问题,因为这是内部实现,并且属性名称不需要在接口中。但是会有新的属性,我不知道如何正确处理它们。
我打算在架构中做的是这样的:
<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 以存储在其他系统中创建它的人。
现在字段值是字符串,我知道哪个字段应该是哪种类型,我可以在我的 WS 中的 db 操作之前转换它们。
但这有意义吗?我应该使用
xsd:any
以某种方式适用于其他领域?
怎么用
xsd:anyType
我可以使用它而不是字符串作为键值对值的类型吗?我将不胜感激帮助如何真正做到这一点!
除了我的问题,我很乐意听到关于这种模式设计的任何评论。所以请随意评论我在这里写的模型模式部分!
谢谢和最好的问候-马蒂