使用新的System.Tuple类设计不好吗?


19

我喜欢System.Tuple的概念,因为它允许我在不实例化新类的情况下在单个函数调用中返回多个参数,但这是否违反了Microsoft的Patterns&Practices,SOLID Principles等任何良好的编程习惯。

我只是试图确定我应该使用该功能的自由度,还是仅在必要时在极端情况下使用它。


+1:很好的问题。另外-我想知道安德斯·海斯伯格是否对此有所考虑。
Jim G.

Answers:


11

使用的问题Tuple是通用类型参数不传达含义。

为了提高可读性,您可能要考虑使用自定义类或什至具有命名成员的匿名类型。


XML参数说明呢?不是最明显的地方,但总比没有好。
约翰·布布里斯基

@SkippyFire-你是什么意思?您得到的只是的类型T1T2等等。不告诉您它们的含义。
Oded

2
我不得不说:每当我(或我们团队中的某个人)使用元组作为类型时,我都会不断地引用代码中的其他部分来记住.Item1,.Item2等。对于任何不完全琐碎的事情,请创建离散类。将来有机会了解自己在做什么。

@Oded我正在谈论 XML文档添加到接受Tuple的方法中。同样,这不是完美的,但是如果您想/需要使用元组,总比没有好。
John Bubriski 2012年

1
@Oded此外,参数或返回值可能无法传达含义,但方法名称可以。假设您有一个名为的方法GetTopTwoPercentages()返回了Tuple<decimal, decimal>。这可能已经足够清楚了。
约翰·布布里斯基

8

可读性是最重要的代码质量之一。因此,问问自己:
当我(即您以外的其他人)查看方法签名时,我是否知道该对象的各个组成部分的含义Tuple
例如,如果您要返回的一对浮点是一组极坐标,这清楚吗?

这很清楚:

Tuple<Float, Float> getPolarCoords();

这具有误导性(因为人们会假设笛卡尔坐标):

Tuple<Float, Float> getCoords();

这是没有意义的:

Tuple<Float, Float> getTuple();

因此,一般而言,您将根据具体情况评估清晰度,并在必要时进行重构。如果您代表的数据与Tuple许多地方的数据相同,那么创建一个类绝对是一个好主意。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.