跨多个解决方案重构代码

时间:2014-03-05 18:15:46

标签: visual-studio refactoring automated-refactoring

我有一个C#类库项目,被许多不同的业务线解决方案引用,我们称之为MyCompanyUtilities。 MyCompanyUtilities包含数据库访问代码,用于从ERP系统检索有关员工的数据的代码,有用的扩展方法,发送电子邮件的代码等。

偶尔,我想重构MyCompanyUtilities中的代码,这有时会在其他项目中引入重大更改。作为示例用例,假设我想重命名函数:

public static User Load(string employeeId){}

public static User LoadByEmployeeId(string employeeId){}

显然,这种改变的基本原理是,现在我也可以实现具有类似签名的方法。

public static User LoadByPersonId(string personId) {}

但是,如何更新可能使用上一个函数调用的所有其他解决方案/项目?我有至少30多个参考MyCompanyUtilities的项目/解决方案。我正在使用Visual Studio 2010 Professional。

3 个答案:

答案 0 :(得分:1)

方法的名称并未揭示其目的。在具体情况下,我将旧方法更改为:

public static User Load(string employeeId){
    return LoadByPersonId(string personId);
}

然后我将标记旧方法:

[Obsolete("Load is deprecated, please use LoadByPersonId instead.")]

答案 1 :(得分:1)

如果将来有人遇到这个问题,我使用NuGet解决了这个问题。我创建了一个私有NuGet存储库来托管我的MyCompanyUtilities。现在我的各种解决方案可以参考实用程序的特定版本,当我打开这些解决方案时,我可以选择升级到更新版本的实用程序。不,它不会自动重构所有解决方案,但至少我在加载新项目时没有进行重大更改,除非我选择更新到更新版本的实用程序。

答案 2 :(得分:0)

重命名多个解决方案的重构:

实际上没有直接的方法来实现这一点,因为解决方案可能存在于本地磁盘驱动器中,或者可能在本地计算机和远程计算机之间分离,可能在源控制系统,Visual Studio或任何其他重构工具都不会对它们有所了解。但是等等......一些调整有时可能会有用。

您可以在一个位置创建包含引用项目(MyCompanyUtilities)和来自不同解决方案的所有其他依赖项目的根解决方案。然后天真的Rename Refactoring技术可能足够case。完成所需的重构后,您需要手动或借助批处理命令等项目将项目复制回其父解决方案。

挖掘进一步重构......正如您所说MyCompanyUtilities包含database access codecode for retrieving data from your ERP system about our employeesuseful extension methodscode to send emails等我建议如果包含此类代码,则从UI中提取所有DatabaseMyCompanyUtilities相关代码。然后,只要您的公司有任何业务要​​求,您就可以轻松更改front-end UI(例如Desktop <-> Web <-> Mobile <-> Cloud)和back-end Database(例如MSSQL <-> SQLite <-> Oracle <-> MySQL)。

在一个句子中,将更改的代码与不更改的代码分开。