【问题标题】:What would be a good design to avoid methods with large number of parameters?避免使用大量参数的方法的好的设计是什么?
【发布时间】:2012-01-06 20:49:39
【问题描述】:

我遇到了一些设计问题。我正在做的是 C# 桌面应用程序中的拖放操作。我正在使用 .NET 树视图控件和第三方网格(不重要)。我在多个地方使用文件系统的这种拖放操作,所以我创建了一个静态类来处理这个问题。现在这不仅仅是一个普通的文件系统。树视图是目录的表示,网格有文件。复杂的部分是还有一个逻辑文件系统,所以所有这些都存储在数据库中。我只是解释所有这些,因为我想解释为什么我有问题。因为此时我正在处理许多对象,所以我的所有静态方法都有大量参数。我所有的静态方法几乎都使用与 wel 相同的参数 我能做些什么来避免这种情况吗?

【问题讨论】:

    标签: c# .net drag-and-drop treeview


    【解决方案1】:

    通过将这些字段封装在常见对象中来减少参数,例如

    而不是:

    void DoSomething(string first, string middle, string last);
    

    你可以:

    void DoSomething(Name name);
    

    其中名称​​可以表示为,

    public class Name
    {
       string First {get; set;}
       string Middle {get; set;}
       string Last {get; set;}
    }
    

    【讨论】:

      【解决方案2】:

      一旦我们得到一定数量的方法参数(3-5),我们创建一个类来保存参数参数,然后只传递这个类的一个实例作为参数。

      如果您有多个方法具有基本相同的参数,这将特别有用。

      不过,不要太过分了:如果你有一个只在一种方法中使用的参数,我不会将它包含在 arguments 类中,只需将它作为额外参数传递给异常方法.

      此外,作为附带的好处,这使得将参数传递给线程/后台工作人员变得更加容易,因为您已经在类对象中拥有参数。

      【讨论】:

        【解决方案3】:

        在这里,您正在识别标记为long parameter list 的已知“难闻气味”。描述的很好on this site

        我发现最直接的解决方案是introduce parameter object

        提到的其他重构步骤是:

        这两个步骤的潜在问题是它引入了更多的耦合。这将要求您的静态实用程序方法了解这些方法或现有对象,这可能完全不合适,具体取决于您的设计。

        【讨论】:

          猜你喜欢
          • 2014-09-12
          • 2010-09-26
          • 2019-04-07
          • 2010-11-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多