用C#或Java重构包的最简单方法?

用C#或Java重构包的最简单方法?,c#,java,.net,C#,Java,.net,我对C#或Java对名称空间或包的重构感到非常恼火。如果您在许多类中引用了许多独立项目中使用的公共包中的一个类,并且如果您决定仅将该包作为当前父包的子包移动,那么您必须修改所有客户端,因为您不能像这样使用通用导入 导入我的包* 这将允许在不影响客户端的情况下进行重构 那么,当一个如此小的变化所带来的影响如此之大时,您如何进行重构呢 如果客户的代码不在我的控制之下,我会被卡住吗 使用支持重构的IDE。如果在Eclipse中移动java文件,所有引用都会更新。重命名、包名更改等也一样。非常方便。想象

我对C#或Java对名称空间或包的重构感到非常恼火。如果您在许多类中引用了许多独立项目中使用的公共包中的一个类,并且如果您决定仅将该包作为当前父包的子包移动,那么您必须修改所有客户端,因为您不能像这样使用通用导入

导入我的包*

这将允许在不影响客户端的情况下进行重构

那么,当一个如此小的变化所带来的影响如此之大时,您如何进行重构呢


如果客户的代码不在我的控制之下,我会被卡住吗

使用支持重构的IDE。如果在Eclipse中移动java文件,所有引用都会更新。重命名、包名更改等也一样。非常方便。

想象有人在执行导入操作,如
import com.*
,如果它是您想要的,它将加载
com
包中的任何内容,这意味着将导入无数类,然后您会抱怨为什么导入速度如此缓慢,为什么它需要太多的内存


在您的情况下,如果您使用IDE,这将完成大部分工作,而且非常简单,但如果您的应用程序体系结构需要,您仍然需要将新的可执行文件部署到客户端。

这听起来像是您询问编译并部署到其他项目的包,例如jar文件。这就是为什么让API尽可能正确是如此重要的原因之一


我认为您可以不推荐现有结构,并将每个类修改为新重构类的包装器或门面。这可能使您能够灵活地继续改进新结构,同时减缓迁移使用旧代码的项目的速度。

您可以使用诸如ReSharper之类的工具轻松地完成这项工作,我可以理解您的问题。特别是如果您是一名API开发人员,并且有多个客户端使用您的库。这就是为什么人们在创建公共API时格外小心的原因。我有一个简单的问题,所有的客户端代码都在你的控制之下吗?(如果有第三方客户,那么你就不走运了)。在这种情况下,您唯一能做的就是编写一个适配器层,并在旧名称空间中公开您的新代码,同时附带一个弃用警告。当然,如果您可以控制所有的客户端代码,那么重构就很简单了。只需将所有项目添加到Intellij中的同一项目下(作为模块),然后执行重构。IDEA将理解并更改文件夹名称,即使您尚未在项目之间建立任何正式连接(使用maven依赖项或作为引用项目)。您尚未解释您认为此语言功能将如何工作,或者它将如何更改不受您控制的客户机代码。更改软件包不是一个小的更改。为什么它会加载所有这些?它可以使用即时技术。目前没有,但你描述的方式是,如果我没有误解的话,加载所有内容?是的。如果您没有访问客户端代码的权限,您将无法进行中断更改或中断更改并发布迁移指南。这里没有简单的答案。