我应该保留这个静态变量,还是重构它?

时间:2016-04-04 21:34:54

标签: c# refactoring

前一位开发人员在我继承的项目中的“god”类中放置了一个名为“Qry”的静态字符串。

然后,开发人员在整个程序的每个位置使用此静态变量,构建并使用单个db查询字符串。

例如:

SomeGodClass.Qry = "select count(1) from AddressBook where Name = '" + txtName.Text.Trim(' ') +
                            "' and Group_Name = '" + txtGroupName.Text.Trim(' ') + "'";

int count = sqlHelper.ExecuteScalar(SomeGodClass.Qry);

因此,这个变量正好被引用了626次,大多数被分配了不同的查询。他使用了其他静态变量 - 可能是其中的50个 - 但这是最​​主要的。

我的第一直觉是删除这个静态字符串并重做所有626次使用。但是,我不知道这是否是一个足够糟糕的做法,花时间去做。

因此,我的问题是:这是否可以接受静态字符串的使用,特别是在考虑重构工作量时?

3 个答案:

答案 0 :(得分:3)

在这里看不到使用static的任何问题,至少从我看到的代码判断。但是不要使用TextBox连接!

请改用Parameters

这是我在查看所提供的代码时可以想到的最重要的重构。

Why do we always prefer using parameters in SQL statements?

答案 1 :(得分:1)

你一定要重构这个。看起来SomeGodClass.Qry似乎是某种常数,但如果你继续重新分配它会有什么好处呢?现在你永远不知道它的价值是什么,除非你刚刚覆盖了它。 只需使用局部变量查询,并使用参数(如Tigran所说)

答案 2 :(得分:1)

对这样的代码使用静态成员的一个主要问题是,乍一看,它看起来很好(如果有点多余)。

SomeGodClass.Qry = /* Some Query */;

int count = sqlHelper.ExecuteScalar(SomeGodClass.Qry);

它分配一个值,然后使用它,很棒。如果您开始在应用程序中引入线程,则会出现问题。突然,静态被分配并从多个线程中使用,并且无法保证Execute中使用的值与在方法上分配的值相同。

这个问题有多大,显然取决于你的应用程序,如果代码在库等...