有一个类通过每个表有1 string[]
个变量来定义各个表中的主键。例如:
static string[] my_table_foo_TablePrimaryKeys = new string[] { "primary_key1", "primary_key2" }
static string[] my_table_bar_TablePrimaryKeys = new string[] { "user_id", "customer_number" }
我发现这对于我们稍后添加第3个表并且我们想要返回到这个类以定义新的第3个表的主键的情况来说有点混乱且不易扩展。所以,我重构它看起来像这样:
static Dictionary<string, string[]> tablePrimaryKeys = new Dictionary<string, string[]>()
{
{"my_table_foo", new string[] { "primary_key1", "primary_key2" }},
{"my_table_bar", new string[] { "user_id", "customer_number" }}
};
你们认为这是一个体面的重构改变吗?为什么呢?
另外,在我看来主键被引用时,它也有点干净。例如:
在前一种情况下:
DoStuffWithPrimaryKeys( my_table_foo_TablePrimaryKeys, "other stuff", 1000 );
在后一种情况下:
string[] keys = tablePrimaryKeys["my_table_foo"];
DoStuffWithPrimaryKeys( keys, "other stuff", 1000 );
如果有人还想提及“可接受的重构”的原则是什么,以及如何知道重构和什么不可接受,那将是伟大的,非常有教育意义。
我正在使用C#和.NET 3.5。
答案 0 :(得分:3)
我对这种变化并不太疯狂。这两种情况对我来说都很可疑,但在第一种情况下,至少从编译器中获得了一些安全性。只要在初始化变量的地方拼写正确的键,它们就会在使用时按预期工作。
重构之后,你将在任何地方使用字符串,任何拼写错误都会导致运行时错误。
答案 1 :(得分:1)
这些都不适合我。我不知道你的系统的要求是什么,但我会在这里查看更大的图片,看看是否有更好的方法来完成这项工作。至于这里的重构,我不会打扰,也不会为改变的风险增加任何大的好处。
答案 2 :(得分:0)
我会说它不是更好或更糟。你只是引入魔术字符串而不是变量名。