【问题标题】:How to use less arguments for methods [closed]如何为方法使用更少的参数[关闭]
【发布时间】:2014-11-25 20:19:40
【问题描述】:

我在此方法中根据这些参数在表格中搜索我的数据。

public List<Product_tbl> GET_Product(int? ProductID = null, string Name= null, bool? MakeFlag= null, string Color= null)
{
   ...
}

我知道我应该尽可能少地为方法提供参数,那么有什么方法可以让我的代码干净利落,并为这类方法使用更少的参数。

【问题讨论】:

  • 你不应该试图改变完美运行的代码来遵守一些抽象的“参数太多”的原则。你的方法应该有尽可能多的参数。概括只是为了让您提出问题并考虑您的参数是否合适。
  • 您是否查看过默认值或方法的参数
  • 它是一种动态选择查询,首先我将数据加载到列表中,然后根据参数进行搜索
  • 当您的参数表示唯一键时,这种方法即查询是可以的。否则,不要这样做。您最终会得到没有意义的方法调用,或者会无缘无故地询问太多数据。
  • 我投票决定将此问题作为题外话来结束,因为应该根据 CodeReview.SE 的指导方针在 CodeReview.SE 上询问希望改进的工作代码,而不是在 Stack Overflow 上。

标签: c# methods arguments


【解决方案1】:

改为将参数包装在一个类中。

public class ProductArgs
{
    public int? ProductID { get; set; }
    public string Name { get; set; }
    public string Color { get; set; }
    public bool? MakeFlag { get; set; }
}

public List GET_Product(ProductArgs p){ ... }

正如 cmets 所建议的,您不应该为了“干净”的代码而努力减少参数。除非该类构造在您的应用程序中有其他用途,否则不应使用此类仅用于表示单个方法调用中的参数的类。不要害怕在一个方法调用中有 4 个参数,这没有什么“不干净”的。

【讨论】:

  • 此信息在概念上并不代表逻辑类型。他们一起上课是没有意义的。它也没有解决方法要求比应有的更多信息的基本问题。
  • 它表示方法的参数,这正是它试图表示的内容。那个人要求一种减少args的方法,你去。我同意你不应该这样做,除非你打算重用这个类,但我只是在回答他的问题。
  • @Servy 几乎没有足够的信息来拨打电话。原始方法表明更好的设计可以消除这个问题的需要,但我们只能推测。
  • @Servy 我一般同意,但在这种情况下,“更多信息”会大大超出原始问题的范围。我会承认,它应该在答案中建议仔细研究这种方法存在的原因和其他因素。
  • @Servy 我实际上认为这解决了用户所说的“问题”,但是这是讨论它是否真的一个问题。我不得不承认MakeFlag 可能不应该在ProductArgs 中,但这只是我的解释。我认为它应该从ProductArgs 中省略并放回方法的参数中。
【解决方案2】:

有时您只需要为方法提供很多参数。你对可选参数所做的事情很棒,我假设你已经知道你可以做到

GET_Product(Name:"blah");

在我看来,您的代码看起来不错,因为大多数查询都需要这些代码。如果您真的有太多参数,需要考虑的是创建一个可以为您保存参数的查询类。这更多地用于可选参数不起作用的Java之类的东西。但是,如果您需要,它应该可以工作。例如:

MyQuery q = new MyQuery();
q.Name("Steve");
q.Id(42);
q.Color("pink");
GET_Product(q);

【讨论】:

  • 一个问题可以有多个答案。特别是因为提问者尚未接受答案。您可以在顶部省略您的EDIT
猜你喜欢
  • 2017-04-29
  • 2016-07-05
  • 2014-06-30
  • 1970-01-01
  • 2020-01-06
  • 2021-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多