我正在为许多不同的客户构建网络服务以连接到汽车零部件数据库。该零件具有多种特性。不同的客户将需要不同的属性子集来“完成他们的任务”。
所有客户至少需要一个 ID、零件编号和姓名。有些可能需要价格,有些可能需要图像的 URL,等等。下一个客户端可能是几年后编写的,并且需要不同的属性子集。我不想发送超出他们需要的内容。
我一直在为每个需求构建具有属性子集的单独“PartDTO”,并将它们作为单独的 Web 服务方法提供,以返回相同的部件列表,但每个部件具有不同的属性。我不想为每个客户端构建此内容并为 DTO 和方法提供逻辑名称,而是希望有一种方法让客户端指定他们想要的内容。我正在返回 JSON,因此我正在考虑客户端向我传递一个 JSON 对象,列出他们在结果集中想要的属性:
ret = { ImageUrl: true, RetailPrice: true, ... }
首先,这有意义吗?
其次,我不想在这里失去的是返回 IEnumerable < DTO > 并让 JSON 工具对其进行序列化的良好语法。我当然可以构建一个“JSON”字符串并返回它,但这看起来很笨拙。
建议? C#“动态”?
最佳答案
这是 Entity-Attribute-Value model 的一个非常好的候选者。 。基本上你有一个包含 ID、名称、值的表,并且允许每个客户/方面存储他们想要的任何内容...然后当他们查询时,你返回他们的名称-值对并让他们随意使用它们。
优点: super 灵活。适合强大的模式增加大量复杂性与值(value)的情况。多个客户端的单一端点。
缺点:通常不喜欢的模式,很难有效地选择,也很难建立索引。但是,如果您所做的只是存储并返回名称-值的集合,那么应该没问题。
关于c# - "Flexible Webservice"的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20618342/