English 中文(简体)
B. 关于需要的建议 3. 接口因素
原标题:Need suggestions regarding Interface refactoring

我继承了一个称为IDataProvider的宽大接口的项目。 申请的所有方面都有办法在档案中存档。 这不是说它是一个巨大的问题,而是将它们分成小的档案,有描述性的名称。 为了在多个接口中重新定位和打破接口(单单单是IVehicleProvider、IardrProvider等......),需要大规模编码调整,因为有许多班级可以实施接口。 我设想另外两种方式: (1) 为申请的每个方面建立多份档案,使接口部分或2)建立多个接口,如IVehicleProvider、IardrProvider和IDataprovider接口。

你会做些什么? 或者如果你能想到更好的方法,请说明。

增 编

最佳回答

该书表明接口不属于供应商,而是属于接口的client/em>。 也就是说,你应根据用户而不是实施用户的类别来界定这些用户。 根据你的情况,国际发展信息数据库提供商的用户(可能)只使用该大界面功能的一小部分。 其中一名客户。 删除其用于新接口的功能类别,并从IDataProvider中删除这一功能(但如果你想要让IDataProvider扩大你的新的接口,以维护现有的行为,感到是自由的)。 填满前的复函,然后取走了IDataProvider。

问题回答

如果不把你正在从事的技术或技术告诉我们,就难以回答。

假设NET,最初的重新计算应当非常低。

执行原始接口的班级已经全部实施。

一俟你建立较小的接口,你就改变:

public class SomeProvider : IAmAHugeInterface { … }

public class SomeProvider : IProvideA, IProvideB, IProvideC, IProvideD { … }

......和你的法典完全是以前的做法,只要你不把任何成员从那里开始的话添加或删除。

从那里,你可以按需要或按需要打下课堂,从宣言中删除额外方法和接口。

是否正确是,实施这一单一大界面的多数类别,如果不是全部的话,都有许多方法,要么没有做什么,要么放弃例外?

如果说情况如此,而且你有着大量不同关切的大班级,那么你就会痛苦地重温,但我认为,现在处理这种令人振奋的办法是最佳的办法——你所建议的替代办法只是把你推向不同的坏情况,把痛苦推向微薄的利润。

可以做的一件事是将多个接口应用到单一类别(多数语文),这样,你就能够创建新的接口,取代与多个较小的接口的单一大型接口:

public class BigNastyClass : IBigNastyInterface
{
}

同意:

public class BigNastyClass : ISmallerInferface1, ISmallerInterface2 ...
{
}

如果你没有执行整个接口的庞大班级,我将按班级处理这一问题。 对于实施这一大接口的每个类别,只为这一类别引进一个新的具体接口。

这样,你就只需要重新调整其法典,使之在某个时候有一个等级。

例如,司机将来自:

public class DriverProvider : IBigNastyInterface
{
}

:

public class DriverProvider : IDriverProvider
{
}

现在,你简单地排除了所有未使用的方法,这些方法不仅满足了大的接口,而且确定了司机必须采用的任何方法。

我会这样做。 实现个人、较小的接口,然后使大接口成为其中的集合。

之后,你可以酌情对大的接口进行重新定位。





相关问题
How would you refactor this bit of code?

This bit of code runs on Windows Compact Framework and what it does is obvious. It looks as it should be refactored (especially considering that I may want to add cmd.ExecuteResultSet() later), but I ...

How to avoid debugger-only variables?

I commonly place into variables values that are only used once after assignment. I do this to make debugging more convenient later, as I m able to hover the value on the one line where it s later ...

Java Null Conditional

I have the following pattern appearing many times in my Java code and was wondering how some of you might refactor it. Object obj1 = buildObj1(); if (obj1 != null) { return obj1; } Object obj2 = ...

Writing refactoring-friendly PHP code

As far as I know, and have gathered from other SO posts, there are no proper tools for refactoring PHP code yet, so when it comes to refactoring, it s probably good old search-and-replace for most of ...

Refactor packages in a Jar

I have a requirement that i need to load two versions of a jar at once. To avoid class path collisions I d like to rename the packages of one of the jars. Then in source you could always easily ...