我应该保留这个静态变量,还是重构它?
Should I leave this static variable, or refactor it?
以前的开发人员在我继承的项目中的 "god" class 中放置了一个名为 "Qry" 的静态字符串。
开发人员然后在整个程序中构建和使用单个数据库查询字符串的每个地方都使用了这个静态变量。
例如:
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 种用法。但是,我不知道这是否是一种糟糕的做法,需要花时间去做。
因此,我的问题是:这是对静态字符串的可接受使用吗,尤其是考虑到重构所需的工作量时?
在这里使用 static
没有发现任何问题,至少从我看到的代码来看是这样。但不要使用 TextBox
连接!
改用Parameters。
这是我在查看提供的代码时能想到的最重要的重构。
Why do we always prefer using parameters in SQL statements?
你绝对应该重构它。看起来 SomeGodClass.Qry 被认为是某种常量,但如果你不断地重新分配它,常量有什么用呢?现在你永远不知道它的价值是什么,除非你刚刚覆盖它。
只需使用局部变量查询,并使用参数(如 Tigran 所说)
对这样的代码使用静态成员的一个主要问题是,乍一看,它看起来不错(如果有点多余)。
SomeGodClass.Qry = /* Some Query */;
int count = sqlHelper.ExecuteScalar(SomeGodClass.Qry);
它赋值,然后使用它,太棒了。如果您开始在应用程序中引入线程,问题就来了。突然间,多个线程正在分配和使用静态变量,并且无法保证 Execute
中使用的值与方法更高层分配的值相同。
这是一个多大的问题,显然取决于您的应用程序,代码是否在库中等等...
以前的开发人员在我继承的项目中的 "god" class 中放置了一个名为 "Qry" 的静态字符串。
开发人员然后在整个程序中构建和使用单个数据库查询字符串的每个地方都使用了这个静态变量。
例如:
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 种用法。但是,我不知道这是否是一种糟糕的做法,需要花时间去做。
因此,我的问题是:这是对静态字符串的可接受使用吗,尤其是考虑到重构所需的工作量时?
在这里使用 static
没有发现任何问题,至少从我看到的代码来看是这样。但不要使用 TextBox
连接!
改用Parameters。
这是我在查看提供的代码时能想到的最重要的重构。
Why do we always prefer using parameters in SQL statements?
你绝对应该重构它。看起来 SomeGodClass.Qry 被认为是某种常量,但如果你不断地重新分配它,常量有什么用呢?现在你永远不知道它的价值是什么,除非你刚刚覆盖它。 只需使用局部变量查询,并使用参数(如 Tigran 所说)
对这样的代码使用静态成员的一个主要问题是,乍一看,它看起来不错(如果有点多余)。
SomeGodClass.Qry = /* Some Query */;
int count = sqlHelper.ExecuteScalar(SomeGodClass.Qry);
它赋值,然后使用它,太棒了。如果您开始在应用程序中引入线程,问题就来了。突然间,多个线程正在分配和使用静态变量,并且无法保证 Execute
中使用的值与方法更高层分配的值相同。
这是一个多大的问题,显然取决于您的应用程序,代码是否在库中等等...