这次重构有什么好处吗?

时间:2011-08-02 19:38:03

标签: c# refactoring

有一个类通过每个表有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。

3 个答案:

答案 0 :(得分:3)

我对这种变化并不太疯狂。这两种情况对我来说都很可疑,但在第一种情况下,至少从编译器中获得了一些安全性。只要在初始化变量的地方拼写正确的键,它们就会在使用时按预期工作。

重构之后,你将在任何地方使用字符串,任何拼写错误都会导致运行时错误。

答案 1 :(得分:1)

这些都不适合我。我不知道你的系统的要求是什么,但我会在这里查看更大的图片,看看是否有更好的方法来完成这项工作。至于这里的重构,我不会打扰,也不会为改变的风险增加任何大的好处。

答案 2 :(得分:0)

我会说它不是更好或更糟。你只是引入魔术字符串而不是变量名。