Interface 需要关于接口重构的建议吗

Interface 需要关于接口重构的建议吗,interface,refactoring,Interface,Refactoring,我继承了一个声明了一个笨拙的大接口的项目(我们称之为IDataProvider)。在文件中,有许多方法用于应用程序的各个方面。这并不是一个大问题,但我宁愿将它们拆分为具有描述性名称的较小文件。要重构接口并将其分解为多个接口(比如IVehicleProvider、IDriverProvider等),需要进行大量的代码重构,因为有很多类实现了接口。我正在考虑另外两种分类方法:1)为应用程序的每个单独方面创建多个文件,并使接口成为部分接口,或2)创建多个接口,如IVehicleProvider、IDr

我继承了一个声明了一个笨拙的大接口的项目(我们称之为IDataProvider)。在文件中,有许多方法用于应用程序的各个方面。这并不是一个大问题,但我宁愿将它们拆分为具有描述性名称的较小文件。要重构接口并将其分解为多个接口(比如IVehicleProvider、IDriverProvider等),需要进行大量的代码重构,因为有很多类实现了接口。我正在考虑另外两种分类方法:1)为应用程序的每个单独方面创建多个文件,并使接口成为部分接口,或2)创建多个接口,如IVehicleProvider、IDriverProvider,并使IDataProvider接口从中插入

你更愿意做上述哪一项?为什么?或者如果你能想出更好的办法,请告诉我


谢谢

实现这个大接口的大多数类(如果不是所有的话)都有很多方法,它们要么什么都不做,要么抛出异常,这是正确的吗

如果不是这样的话,并且你有很多不同关注点的大类,那么你将面临痛苦的重构,但我认为现在处理这个重构是最好的方法——你建议的替代方案只是将你推入不同的糟糕情况,推迟痛苦而得不到什么好处

可以做的一件事是将多个接口应用于单个类(在大多数语言中),这样您就可以创建新的接口,并用多个较小的接口替换单个大接口:

public class BigNastyClass : IBigNastyInterface
{
}
转到:

public class BigNastyClass : ISmallerInferface1, ISmallerInterface2 ...
{
}
如果没有实现整个接口的大型类,我将逐个类地解决这个问题。对于实现这个大接口的每个类,只为该类引入一个新的特定接口

这样,一次只需重构一个类的代码基

例如,DriverProvider将来自:

public class DriverProvider : IBigNastyInterface
{
}
致:


现在,您只需删除所有未使用的方法,这些方法除了满足大接口之外没有任何作用,并修复需要传入DriverProvider的任何方法。

表明接口不属于提供程序,而是属于接口的客户端。也就是说,您应该基于它们的用户而不是实现它们的类来定义它们。根据您的情况,IDataProvider的用户每次(可能)只使用该大界面功能的一小部分。选择其中一个客户。将其使用的功能子集提取到新接口中,并从IDataProvider中删除该功能(但如果您希望让IDataProvider扩展新接口以保留现有行为,请随意)。重复以上步骤,直到完成为止,然后去掉IDataProvider。

如果没有任何标签或信息告诉我们您使用的技术,这是很难回答的

假设.NET,初始重构应该是非常小的

实现原始接口的类已经完整地实现了它

创建较小的接口后,只需更改:

public class SomeProvider : IAmAHugeInterface { … }
与:

…并且您的代码完全按照以前的方式运行,只要您没有从最初的代码中添加或删除任何成员


从那里,您可以根据需要或遇到的情况缩减类,并从声明中删除额外的方法和接口。

我会做后一件事。制作单个的、较小的接口,然后将“大”接口作为它们的集合


在此之后,您可以根据需要在it用户中重构大接口。

谢谢大家的回答。由于我不想花任何时间进行重构(至少目前不想),我将把大接口分解成多个较小的接口,并使用继承将它们聚合成一个,使聚合接口的名称与大接口的名称相同。
public class SomeProvider : IAmAHugeInterface { … }
public class SomeProvider : IProvideA, IProvideB, IProvideC, IProvideD { … }