使用静态类作为变量容器在整个程序中传递是不好的做法

时间:2015-02-26 19:33:32

标签: c# winforms class

我真的想对这种方法有所了解。我创建了一个静态类来保存将通过我的应用程序使用的变量。这是不好的做法吗?我想更多地了解这一点,所以将来我不会做出糟糕的设计结构。

这是我的静态类:

 public static class clsIdStorage
{
    #region Pass Through Variable
    public static int? WorkOrderNumber { get; set; }
    public static bool WorkOrderVerified { get; set; }
    public static bool ProductSelected { get; set; }
    public static int EmployeeID { get; set; }
    public static bool CheckedIn { get; set; }
    public static int ProductSerialNumber { get; set; }
    public static int BoardSerialNumber { get; set; }
    public static long ProductID { get; set; }
    public static long BoardID { get; set; }
    public static string FullName {get; set;}
    public static int? BoardWoId { get; set; }
    public static int? ProductWoId { get; set; }
    public static bool ValidProductWOID { get; set; }
    public static bool ValidBoardWOID { get; set; }
    public static string PartNumber { get; set; }
    public static string BoardPartNumber { get; set; }
    public static object ProcessorBoard { get; set; }
    public static object AudioBoard { get; set; }
    public static bool RepairsCompleted { get; set; }
    public static int WorkOrderLookUp { get; set; }
    #endregion

    #region Time Variable
    // Work Order Time
    public static string EmployeeCheckIn { get; set; }
    public static string EmployeeCheckOut { get; set; }
    public static string BoardWorkOrderTime { get; set; }
    public static string ProductWorkOrderTime { get; set; }

    // Product Time
    public static string ProductCheckIn { get; set; }
    public static string ProductCheckOut { get; set; }

    // Board Time
    public static string BoardCheckIn { get; set; }
    public static string BoardCheckOut { get; set; }

    // Process flow variables
    public static int LocationID { get; set; }
    public static object PreviousLocation { get; set; }
    public static int ScenarioID { get; set; }
    #endregion
}

3 个答案:

答案 0 :(得分:4)

我用这种方法看到的一个问题是你的静态类和成员似乎与你需要多个实例的东西有关。

例如,当您在上面设置这些值时,您将一次拥有每个值的一个实例(如ProductID)。有些人选择面向对象的方法来存储此类信息的ProductIDs等的多个实例。

我仍然在调用函数时使用静态类,但是当我需要存储许多相同类型信息的实例或记录时,我选择了一种面向对象的方法。

至于能够调用静态类并在整个程序中读取它的变量,这很好并且有用。但是你的成员大纲让我觉得这种方法的方法是错误的。

答案 1 :(得分:3)

这里最大的问题与依赖关系有关。解决方案中的每个项目都需要引用静态类。如果您需要添加一个新值,那么您需要重新编译所有类。

另外,如果你有一个项目定义了你想在静态类中引用的自定义类,那么你就会遇到循环依赖问题。

您还向所有解决方案公开了许多变量,可能会使部分代码执行不安全的操作(即根据静态文件中的路径覆盖文件内容。)

这是一种不好的做法。

您应该使用配置文件或某种形式的依赖注入。

答案 2 :(得分:1)

简短回答:不,这可能不是很好的做法。 答案很长:对于这个问题,Code Review stack exchange是一个更好的地方。我建议把它带到那里。