2014-12-06 83 views
1

这是关于类设计和代码复制的另一个问题。代码重复与否?

这是场景: 我们有一个名为SupportedFlow的属性。 此属性是只读的,并返回一个FlowInfo对象的列表,每个FlowInfo对象表示一个流(外部系统发送的物理文件),其中包含一些属性,如FlowType(表示流类型的对象,例如“客户流”或“档案流”)。

我们正在构建的系统中的其他一些类需要知道“支持的流类型”列表,他们可以通过读取上述对象的SupportedFlow属性并应用简单的LINQ查询来获取它:SupportedFlow.Select(p = > p.FlowType).ToList()

其他一些类可能需要一个类似的列表,通过在SupportedFlow列表上应用一个过滤器,通过LINQ到对象扩展方法获得其中,对于所有支持的流匹配任何条件(例如:与客户相关的支持流量)。

这是我的问题:在这种情况下,什么是最好的设计选择,向原始对象(如SupportedFlowType或CustomerRelatedSupportedFlows)添加新属性,将原始属性SupportedFlow应用到适当的LINQ查询,或者重复LINQ每次需要时在系统的其他类中查询?

从某种意义上说,我猜这是一个代码重用的例子,但同时我不确定通过添加新属性使原始对象复杂化是最好的选择,因为这些LINQ查询非常简单,新的属性不会增加代码库的清晰度。

感谢您的回复。

干杯

回答

0

添加功能可以在原来的对象确实是复杂的,但它仍然是比你处处需要重复的功能更好。

但是,还有第三个选项:将该方法放在util类中。这使原始对象保持简单并防止代码重复。唯一的缺点是,如果你需要的话,你需要“知道”有这样的util类/方法。

+1

感谢您的回复。因此,您建议创建一个Util类,其中包含一些方法,如“GetSupportedFlowType”或“GetCustomerRelatedSupportedFlows”,它将FlowInfo对象列表作为参数,并返回通过将LINQ应用到对象查询而获得的列表。这听起来很不错! – 2014-12-06 16:15:51

+0

@EnricoMassone是的,除非你可以实现一个单一的函数,它可以根据传递给它的参数做所有事情。我对linq或者你的源代码不太熟悉,不知道这是否可行 – 2014-12-06 17:02:42