我正在整合一个处理大型搜索的 WCF 服务(目前有 50-60 个参数,将来可能会添加更多)。为了处理这个问题,我有一个搜索对象,其中包含将在消息对象中传递给服务的所有条件。虽然所有搜索参数都必须可用,但通常情况下有 2-3 个参数接收用户输入而其他参数为空。在我看来,如果只使用几个字段,通过每个方法传递整个对象是没有意义的。我正在寻找一种技术来提取与其值一起使用的字段,然后可以验证这些字段并将其传递到数据层以执行搜索。我能想到的几种实现此目的的方法包括:
- 使用反射循环遍历属性,并将非空属性添加到
Dictionary<string, object>
.这里想到的问题是我丢失了搜索参数的类型,这意味着数据层搜索功能将是一个巨大的 case 语句,每个潜在字段都有硬编码的转换值。这似乎有点矫枉过正,并且导致耦合过于紧密。 - 创建一个具有 Name、Value 和 System.Type 属性的 SearchValue 类,并使用反射构建一个
List<SearchValue>
.这仍然会导致在搜索中进行大量案例检查,但不是按属性,而是按类型。这在使过程更“通用”(即独立于使用的搜索值组合)方面具有一定的吸引力,但也感觉我在重新发明轮子。
我缺少这些技术的优点和缺点是什么?有没有更好的方法来实现我的目标?
最佳答案
我不确定这是否适用于这条通信线路,但可能是 EmitDefaultValue DataMemberAttribute 上的属性?
关于c# - 防止未使用的属性从对象传递的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4501793/