我有一个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。
答案 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 code
,code for retrieving data from your ERP system about our employees
,useful extension methods
,code to send emails
等我建议如果包含此类代码,则从UI
中提取所有Database
和MyCompanyUtilities
相关代码。然后,只要您的公司有任何业务要求,您就可以轻松更改front-end UI
(例如Desktop <-> Web <-> Mobile <-> Cloud
)和back-end Database
(例如MSSQL <-> SQLite <-> Oracle <-> MySQL
)。
在一个句子中,将更改的代码与不更改的代码分开。