是否有这个重构任何好处?

存在着由具有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" }

我觉得这是一个有点乱,为我们在以后添加第三个表的情况下不易伸长,我们要回到这个类来定义新的第三个表的主键。 所以,我重构它看起来是这样的:

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。

--------------解决方案-------------

我不是太疯狂了变化。 这两种情况看起来可疑的给我,但在第一种情况下,至少你从编译器得到安全的一些量。 只要键拼写正确其中变量被初始化,它们将作为预期每当它们被使用。

您重构您将使用字符串到处之后,任何一个拼写错误的地方会导致运行时错误。

这些都不给我看。 我不知道你的系统的要求,但我会看着这里的大局观,看看是否有更好的方法来完全做到这一点。 至于这里的重构,我不会理会,真的没有添加任何大的好处的变化的风险。

我想说的不是更好或更坏。 你只是引入魔术字符串,而不是变量名。

分类:C# 时间:2012-01-01 人气:0
本文关键词: 重构
分享到:

相关文章

  • 如何有效地重构了qooxdoo项目 2012-01-01

    我只是工作的一大qooxdoo项目,要重构它. 例如,我想移动的一类,即从一个包路径(app.ui.)到另一个引用经常(app.view),改变变量名. 普通重构的东西. 在比较德尔福或C#,这似乎是非常痛苦的一个qooxdoo的JavaScript项目. 有没有简单的和简单的方式做到这一点? 供参考:我使用gedit编辑在Linux Mint的项目. --------------解决方案------------- 移动类768,16是因为通常每次数是绝对引用,这意味着你可以用你的编辑器和"搜索

  • 编程语言特性有利于重构? 2012-01-01

    什么是编程语言便于(简化)广泛的自动化源代码分析和重新设计(改造)工具发展的共同特征/属性? 我主要是想在编程语言的功能,使其更容易开发静态分析和重构工具方面(即比较的Java与C ++,其中前者具有重构更好的支持). 换句话说,这将是明确地旨在提供用于自动静态分析和重构从一开始就支持​​的编程语言,什么特性会是优选功能? 例如,对于阿达,还有的ASIS: 阿达语义接口规范(ASIS)是一个分层,开放式架构提供独立于供应商访问阿达图书馆环境. 它允许Ada的程序和库的静态分析. ASIS,阿达语

  • 批量重构使Java方法的参数决赛 2012-01-01

    我四处寻找到一个完整的Java应用程序执行批处理重构的方法. 在此即使方法参数决赛,这是不是这样的呢. 是否有人在这里中知道这样的工具? 或者一些解析Java源代码,并能够与这样的变化进行扩展. --------------解决方案------------- 你可以做的IntelliJ中批量改改各个领域,局部变量或参数可以是最终成为决赛. 做一个代码分析的选项,"应用修复"在全球范围,确保它仍然编译,因为它并不总是得到它在多宗100%正确. 正如彼得Lawrey表明,的IntelliJ

  • VS API,以方便处理重构后的自动代码休息固定 2012-01-03

    我发现自己无数次地重新组织我们的解决方案(72 +工程),努力减少代码. 很多时候,它涉及拉出常见的类型/库和各地移动它们. 它总是涉及到reptitive编译器错误,所以我不得不修正了很多不同的地方相同的编译器错误. 我要寻找到VS API的指导,所以我可以做一些代码生成/自动修复. 即使你没有确切的解决方案,可以请你点我的地方,我应该看? 是否有一个编译器API? 重构API? 如何我可以做任何一个有什么建议? 使用案例: 所以,第一个问题(最简单的两种): 自动固定,当我移动一个文件从一个

  • 什么是有许多,如果要重构代码提取不同的控件类的值的最佳方式和重复逻辑 2012-01-04

    我在WPF应用程序下面的代码 if (panel != null) { IList listOfValues = new ComparableListOfObjects(); var childControls = panel.GetChildren<Control>(x => x.Visibility == Visibility.Visible); foreach (Control childControl in childControls) { var textBox = child

  • 拉重构,Objective-C的 2012-01-04

    我有两个相似的类MultiSlotBlock和SingleSlotBlock 他们已经开始分享很多共同的代码,所以我决定做一些重构和拉一些方法提高到一个新超,姑且称之为Block . 现在的我拉起来,简化的例子中的方法之一,如下所示: // (Block.mm) - (void)doACommonBehaviour { // .. does some stuff [self doAUniqueBehaviour]; } 这里的问题是[self doAUniqueBehaviour]是显示警告当然

  • Asp.net - 重构行动 2012-01-05

    我有这样的"问题",我有这样的代码在我的很多控制器操作: var users = new List<SelectListItem>(); foreach(var user in userRepository.GetAll()) { var item = new SelectListItem { Text = user.FriendlyName, Value = user.UserId.ToString() }; if (User.Identity.Name == user.

  • 如何处理TDD的重构阶段 2012-01-05

    在TDD会议期间,假设我写一个失败的测试,然后让它通过. 我重构通过提取码出原单位,使用重构如提取类和Move方法. 现在再假设我原来的测试不再覆盖提取的代码,因为原始代码现在嘲弄了它的依赖,因为是一个单元测试是正确的. 它是正确的要回去和改造试验到提取的代码? 还是我在做我该如何重构过程中结束了未经测试的代码错了吗? 这感觉就像我的代码库缩放,我不得不重构,我改造了大量的测试到重构的代码. 这种感觉真的很别扭. 我是不是重构错了吗? --------------解决方案------------

  • 工具C代码重构 2012-01-07

    有什么工具有支持重构的C代码(重新命名变量,提取方法,寻找方法引用,...) 最好的Linux环境中,但Windows工具都OK了. 如果有可用的Emacs,甚至更好的东西! --------------解决方案------------- Netbeans的6.7及以上的有相当体面的基本的C(也可能有C ++,但还没有尝试过)的重构. 我用它做我的项目之一的JNI部分的时候,和类似的东西重命名瓦尔,宏功能,找到一个函数的用法的各项工作. 绝对值得一试,看它是否你想要做什么的休息,如果你不执着于e

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.214 (s). 10 q(s)