请求对象,有什么优点和缺点?

假设我有以下方法:

public Stream GetMusic(string songTitle, string albumName) { ... }

我的一位同事确信这是一个糟糕的方法签名。 他希望我使用Request对象,它可以将方法签名转换为:

public Stream GetMusic(SongRequest request) { ... }

我真的不明白这一点。 我看到的唯一好处是将来可以更容易地添加参数。 我们不需要更改方法签名,但Request对象仍然需要更改。

我个人认为这不是一个好主意。 使用参数可以明确该方法运行的要求。 另外,这迫使我们创造另一个不多的对象。

使用Request对象有什么优点和缺点? 你在项目中使用它,为什么?


您使用GetMusic(...)方法获取数据。 如果是这样的话,那么在没有真正需要的情况下可能会过多地使用额外的实体。

事实上,在某种情况下,只有一个输入参数,您可以使用自定义类。 但是如果这个班级是唯一使用的地方,所以如果SongSignature作为班级名称,必须专门用于这个班级,这是使用“参数包”的糟糕做法,因为它具有可读性。

另外,如果有人愚蠢地说SongSignature必须是一个结构体,并且在那个结构体中有一个指向方法内要修改的数据的指针,那么这个指针永远不会真正改变,因为每次GetMusic被调用时,它都会得到一个物业包。

即使它是一个类,也必须将该类的访问者更改为public ,并且通常这不是将参数传递给函数并从函数获取结果的最佳方法,因为您已获取流从那个方法。

我们假设以下情况:

如果在一个团队中一个程序员用一个类SongRequest替换参数,第二个程序员没有发现它被用作函数的参数(因为它将信息放在类的名字中),并在下一个时候将其更改为结构迭代,第三个程序员以这种方式使用这种方法,它必须是一个类(例如在SongRequest使用类引用)...结果没有人确实知道为什么某些东西不能正常工作,因为他们每个人都有圆顶正确的东西...没有任何借口使用类的本地使用,而不是隐式声明的参数。

一般来说,你很有可能在未来遇到这样的情况,因为:

  • 你不是那个改变你的代码的人(即GetMusic
  • 有人可以查看代码并找到有用的班级'SongReqest'(所以情况更糟 - 从本地使用到全球使用班级)
  • 增加SongReuest类可以为你添加一个额外的依赖方法(有人改变这个类,很可能你的功能不会编译)
  • 正如前面提到的,使用SongRequest作为一个property bag锁定它的使用仅仅作为一个类。
  • 使用这个类,你的方法可能永远不会与其他函数调用共享它的参数(出于什么原因?)
  • 最后, 使用SongRequest来传递特定函数的参数,会增加内存占用空间,因为如果经常调用这个方法,一方面它会在内存中创建大量不必要的对象,这些对象必须被垃圾收集,另一方面,如果很少使用这种方法,创建一个类将多个变量传递给单个调用将是不现实的
  • 只有一个真正的理由使用类而不是两个字符串参数:程序员喜欢这样的调用,并希望使所有代码“比以前更漂亮”,更单调,尽管事实上这不是很实用和有用。

    我绝不会建议你让代码看起来像这样,直到你想让它看起来更好。

    通常,我认为使用自定义类为函数传递参数是一种不好的做法。


    传递对象有一个主要优点 -

    如果您有一个用作参数的对象,例如SongRequest ,则该对象可以负责其自己的验证。 这样可以大大简化每个使用该对象的方法中的验证,因为几乎只需要检查null,而不是检查每个参数。

    另外,如果有很多参数,生成单个对象通常会更简单。 如果您发现您需要多重过载来管理不同的参数组合,那么情况尤其如此。

    这就是说,每种情况都是独一无二的。 对于每种情况,我都不会推荐一种方法。

    链接地址: http://www.djcxy.com/p/55053.html

    上一篇: Request object, what are the pros and cons?

    下一篇: My sub query is adding 20 seconds to the execution time. How can I speed it up?