前一位开发人员在我继承的项目中的“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次使用。但是,我不知道这是否是一个足够糟糕的做法,花时间去做。
因此,我的问题是:这是否可以接受静态字符串的使用,特别是在考虑重构工作量时?
答案 0 :(得分:3)
答案 1 :(得分:1)
你一定要重构这个。看起来SomeGodClass.Qry似乎是某种常数,但如果你继续重新分配它会有什么好处呢?现在你永远不知道它的价值是什么,除非你刚刚覆盖了它。 只需使用局部变量查询,并使用参数(如Tigran所说)
答案 2 :(得分:1)
对这样的代码使用静态成员的一个主要问题是,乍一看,它看起来很好(如果有点多余)。
SomeGodClass.Qry = /* Some Query */;
int count = sqlHelper.ExecuteScalar(SomeGodClass.Qry);
它分配一个值,然后使用它,很棒。如果您开始在应用程序中引入线程,则会出现问题。突然,静态被分配并从多个线程中使用,并且无法保证Execute
中使用的值与在方法上分配的值相同。
这个问题有多大,显然取决于你的应用程序,如果代码在库等...