Tag: 重构

重构代码:什么时候做?

自从我开始使用.NET以来,我一直在创建Helper类或Partial类,以保持代码位于并包含在自己的小容器中等。 我想知道的是使代码尽可能干净和完美的最佳实践。 显然干净的代码是主观的,但我在谈论什么时候使用东西(不是如何使用它们),如多态,inheritance,接口,类以及如何更恰当地设计类(使它们更有用,而不仅仅是说’ DatabaseHelper’,正如一些人认为代码中的这种不良做法闻起来wiki )。 是否有任何资源可能有助于这种决策? 请记住,我甚至没有开设过CS或软件工程课程,而且教学资源在现实生活中相当有限。

如何重用重新打开连接的代码?

我们的生产服务器会终止非活动连接,因此我们的API需要在需要时恢复它们。 以下代码有效,但它非常重复: private const int MaxRetryCount = 3; public static SqlDataReader RestoreConnectionAndExecuteReader(SqlCommand command) { int retryCount = 0; while (retryCount++ < MaxRetryCount) { try { if (command.Connection.State == ConnectionState.Closed) command.Connection.Open(); return command.ExecuteReader(); } catch(Exception e) { if(!e.Message.ToLower().Contains("transport-level error has occurred")) { throw; } } } throw new Exception("Failed to restore connection for command:"+command.CommandText); } public […]

Visual Studio:是否有“移动类到不同的命名空间”重构?

我正在做一些架构清理,涉及将一堆类移动到不同的项目和/或命名空间中。 目前我正在手动移动文件,构建,然后根据需要手动添加使用Foo语句来解决编译错误。 有谁知道这样做的更聪明的方法? (我们是CodeRush和Refactor!商店,但我很想知道Resharper是否支持这个)

Visual Studio 2010中的重构选项在C#和VB之间有所不同

在VS2010 C#中,当我右键单击时,会出现“Refactor”菜单,其中包含以下选项: 改名 提取方法 封装场 提取界面 删除参数 重新排序参数 这些选项在VS2010 VB.Net中可用吗? 当我点击右键时,我只能看到“重命名”?

如何在C#中创建Null对象

Martin Fowler的Refactoring讨论了创建Null对象以避免大量的问题 if (myObject == null) 试验。 这样做的正确方法是什么? 我的尝试违反了“构造函数中的虚拟成员调用”规则。 这是我的尝试: public class Animal { public virtual string Name { get; set; } public virtual string Species { get; set; } public virtual bool IsNull { get { return false; } } } public sealed class NullAnimal : Animal { public override string Name { get{ […]

用于处理在Forms中嵌入的自定义类

我有一个C#中的自定义类文件,我inheritance并部分扩展。 我现在正试图重新考虑它,因为我有足够的专业知识来了解generics (我认为)我可以大大浓缩这个类。 作为一个缺乏经验的独奏开发者,我将非常感谢任何可以提供的任何方向或建设性批评。 别温柔! 我很感激你的时间,祝福你! 我是先发制人地抱歉。 using System.Windows.Forms; using DevExpress.XtraEditors; using DevExpress.XtraTab; namespace psWinForms { public static class WinFormCustomHandling { public static void ShowXFormInControl(Form frm, ref XtraTabPage ctl, FormBorderStyle style) { frm.TopLevel = false; frm.ControlBox = false; frm.Parent = ctl; frm.FormBorderStyle = style; frm.Left = 0; frm.Top = 0; frm.Width = ctl.Width + 4; […]

项目Euler:问题1(可能的重构和运行时优化)

我听过很多关于Project Euler的消息,所以我想我解决了C#中的一个问题。 网站上所述的问题如下: 如果我们列出10以下的所有自然数是3或5的倍数,我们得到3,5,6和9.这些倍数的总和是23。 求出1000以下3或5的所有倍数的总和。 我编写了如下代码: class EulerProblem1 { public static void Main() { var totalNum = 1000; var counter = 1; var sum = 0; while (counter < totalNum) { if (DivisibleByThreeOrFive(counter)) sum += counter; counter++; } Console.WriteLine("Total Sum: {0}", sum); Console.ReadKey(); } private static bool DivisibleByThreeOrFive(int counter) { return ((counter % 3 == […]

使用Action词典而不是switch语句

我只是在查看我的一些旧代码(有一些空闲时间),我注意到一个相当冗长的switch语句。 由于获得了新知识,我已经以下面的forms重构了它: private Dictionary createView { get { return new Dictionary() { {“Standard”, CreateStudySummaryView}, {“By Group”, CreateStudySummaryByGroupView}, {“By Group/Time”, CreateViewGroupByHour} }; } } 你会考虑这个好习惯吗,还是仅仅是一个超级丰富和不必要的案例? 我渴望确保我学到的新技术,仅仅为了它而不是聪明,并且它们实际上为代码增加了好处。 谢谢。

重构长切换语句

我在c#中编程,你通过口述命令控制,所以现在我有一个很长的switch语句。 就像是 switch (command) { case “Show commands”: ProgramCommans.ShowAllCommands(); break; case “Close window”: ControlCommands.CloseWindow(); break; case “Switch window”: ControlCommands.SwitchWindow(); break; } 等等 几乎所有情况都只调用一个方法,方法不在一个类中,它们分布在许多类中。 所以问题是,我如何能够将这种转换重构为更优雅的方式?

将C#var重构为显式类型的工具

我们的编码标准要求我们尽量减少C#var的使用(建议限制它与Linq一起使用)。 然而,有时候使用generics的地方比较方便,例如 Dictionary<DateTime, Dictionary> allValues = … // … foreach (var dateEntry in allValue) 更容易打字 foreach (KeyValue<DateTime, Dictionary> dateEntry in allValue) (并且比在某些情况下记住显式类型更容易)。 任何重构工具都能够将前者转换为后者。 我看过Resharper,但它似乎没有做(事实上,它的默认建议是朝相反的方向发展)。