我正在编写一个WCF服务,用于处理大型搜索(目前有50-60个参数,并且未来可能会添加更多)。为了处理这个问题,我创建了一个Search对象,其中包含所有的搜索条件,这些条件将在消息对象中传递给服务。虽然所有的搜索参数必须可用,但通常情况下只有2-3个参数接收用户输入,其他参数为空。在我看来,如果只使用几个字段,就没有必要在每个方法中传递整个对象。我正在寻找一种技术,可以提取使用的字段及其值,这些值可以进行验证并传递到数据层执行搜索。我能想到的几种实现方式包括:
- 使用反射循环遍历属性,并将非空属性添加到
Dictionary<string, object>
中。这种方法的问题是,我失去了搜索参数的类型,这意味着数据层搜索函数将是一个巨大的case语句,其中包含每个潜在字段的硬编码转换值。这似乎有点过度设计,耦合性太强。 - 创建一个SearchValue类,具有Name、Value和System.Type属性,并使用反射构建
List<SearchValue>
。这仍然会导致搜索中的大量case检查,但不是按属性而是按类型。这在使过程更“通用”(即独立于使用的搜索值的组合)方面具有一定吸引力,但这也感觉像是在重复造轮子。